图解HTTP

读书笔记 2017-03-17

了解Web及网络基础

  • 使用HTTP协议访问Web
    浏览器(客户端)在地址栏里输入要访问的页面(URL),客户端从服务器获取文件资源,这一过程是在HTTP协议上进行通信的。
  • 网络基础TCP/IP
    通常使用的网络都是在TCP/IP协议族的基础上运作的,HTTP属于其中的一个子集。
  • TCP/IP协议族的明显特性是分层
    分为4层,应用层,传输层,网络层,数据链路层。
  • 分层的好处
    当部分设计需要修改时,只需更改所在的分层即可,无需修改整个协议,也就是说降低了耦合度。还有就是分层后,各个分层的分工明显,便于去实现,只需把该层次的接口功能实现即可,无需顾及整体。
  • 各分层作用
  • 应用层:决定了向用户提供应用服务时的通信活动。FTP,HTTP,DNS
  • 传输层:提供数据传输。TCP,UDP
  • 网络层:处理网络中流动的数据包。数据包是网络传输中最小的数据单位。该层规定了怎样的传输路线。
  • 链路层:处理网络连接的硬件部分。

TCP/IP协议族分层图

  • 发送端在层与层之间传输数据时,每经过一层时必定会被打上上一层所属的首部信息。反之,接收端则每经过一层都去掉对应的首部信息。
  • 与HTTP关系密切的协议:IP,TCP和DNS
    IP协议的作用是把各种数据包传送给对方,需要IP地址和MAC地址。TCP协议提供可靠的字节流服务。
    字节流服务指为了方便传输,将大块数据分割成报文段。
    可靠是指,能够把数据准确可靠地传给对方,这是三次握手的功劳。
    三次握手:首先发送端发送一个带SYN标志的数据包给对方,接收端回传一个带SYN/ACK标志的数据包表示收到信息,最后发送端再回传带ACK标志的数据包,握手结束。

三次握手
DNS:提供域名到IP地址之间的解析服务。

  • 各协议与HTTP协议的关系
    1.通过DNS解析域名的IP地址
    2.通过HTTP协议向服务器发送请求
    3.TCP协议保证数据的传输
    4.IP协议选择传输路径
    5.TCP协议重组报文段
    6.HTTP协议处理请求
    这只是客户端向服务器发送一个HTTP请求的单方面过程,还未涉及服务器响应请求。
  • URI,URL和URN
    URI=URL+URN
    URL为一个人的居住地址,URN则是一个人的姓名。
    URI的格式:登录信息(可选)+服务器地址+端口号(可选)+文件路径+查询字符串(可选)+片段标识符
    例:http://user:pass@www.google.com:80/dir/index.html?uid=1#c1

简单的HTTP协议

  • 应用HTTP协议时,必定是一端担任客户端角色,另一端担任服务器角色。
  • 请求报文
    请求方法+请求URI+协议版本+可选的请求首部字段+内容实体。

请求报文的构成

  • 响应报文
    协议版本+状态码+解释状态码的原因短语+可选的响应首部字段+主体。

响应报文的构成

  • HTTP是一种无状态协议,所以后来才有Cookie技术。

HTTP/1.1可以使用的方法

  • 持久连接节省通信量
    持久连接:只有任意一端没有明确提出断开连接则一直保持TCP连接状态。
    持久连接使得多数请求以管线化(pipelining)方式发送成为可能,即:不用等待上次请求的响应后才能发送下一个请求。
  • Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态

Cookie技术

HTTP报文内的HTTP信息

  • HTTP报文:用于HTTP协议交互的信息
    请求行:方法 URI HTTP版本
    状态行:状态码 原因短语 HTTP版本
    首部字段:请求或响应的条件和属性的各类首部
    一般有:通用首部,请求首部,响应首部,实体首部
    其他:可能包含未定义的首部(Cookie等)
  • 编码提升传输速率
    gzip(GNU.zip)
    compress(UNIX)
    deflate(zlib)
    identity
  • 分割发送的分块传输编码:传输大块数据时,分割数据以达到逐步显示页面的效果。
  • MIME机制允许邮件处理文本,图片,视频等多个不同类型的数据。
  • 首部字段Range来指定资源的byte范围,从而实现下载中断恢复功能。
  • Accept首部字段达到服务器返回内容的最优。

返回结果的HTTP状态码

状态码

与HTTP协作的Web服务器

  • 单台虚拟主机实现多个域名
    HTTP/1.1允许一台服务器搭建多个Web站点。
    在相同的IP地址下,虚拟主机可以寄存多个主机名和域名的Web网站,因此HTTP请求时,Host首部必须完整指定主机名或域名的URI
  • 通信数据转发程序:代理,网关,隧道
    代理是一种由转发功能的应用程序,是位于服务器和客户端间的中间人,负责转发请求或转发响应。客户端=>>服务器;服务器=>>客户端;
    代理服务器:接收客户端的请求再转发给其他服务器,接收源服务器的响应再转发给客户端。每次通过代理服务器时,会追加写入Via首部信息。
    缓存代理:会预先将资源的缓存保存在代理服务器上。
    透明代理:转发请求或响应时,不对报文做任何加工的代理类型。
    网关和代理十分相似,不同的是能提供非HTTP协议服务。
    隧道的目的是确保客户端与服务器进行安全的通信。
  • 保存资源的缓存
    缓存是指代理服务器或客户端本地磁盘内保持的资源副本,减少对源服务器的访问,节省了通信流量和时间。

HTTP首部

  • HTTP请求报文
    HTTP请求报文

  • HTTP响应报文
    HTTP响应报文

  • HTTP首部字段
    首部字段是为了给浏览器和服务器提供报文主体大小,所使用的语言,认证信息等内容
    HTTP首部字段 =>> 首部字段名:字段值 =>> Content-Type:text/html
    另外单个字段可以有多个值,如:Keep-Alive: timeout=15, max=100

  • 四种HTTP首部字段类型

通用首部字段

请求首部字段

响应首部字段

实体首部字段

确保Web安全的HTTPS

  • HTTP的缺点
    通信使用明文,内容可能会被窃听
    不验证通信方的身份,会遭遇伪装
    无法验证报文完整性,可能被篡改
加密处理防止被窃听
  • 通信的加密
    用SSL或TLS建立安全通信线路后,就可以在该线路上进行HTTP通信了。
    与SSL组合使用的HTTP被称为HTTPS或HTTP over SSL

通信的加密

  • 内容的加密
    实现的前提是客户端和服务器同时具有加密和解密机制,仍有被篡改的风险
  • 不验证通信方身份的隐患
    遇到一个假的客户端
    遇到一个假的服务器
    遇到一个假的大会员
  • HTTP + 加密 + 认证 + 完整性保护 = HTTPS

HTTPS

  • 共享密钥加密的困境
    加密和解密同用一个密钥的方式称为共享密钥加密,对称密钥加密。密钥被攻击者获取了,那就GG了。

共享密钥加密

  • 使用两把密钥的公开密钥加密
    公开密钥加密使用的是一对非对称的密钥,一个公开,一个私有。

公开密钥加密

  • HTTPS采用混合加密机制
    公开密钥加密与共享密钥加密相比,处理速度慢,所以组合使用。

混合加密机制

  • SLL速度慢吗
    通信慢
    处理速度慢
    使用专用的服务器,达到加快处理速度,对于速度慢,没有根本性的解决方案。

确认访问用户身份的认证

  • BASIC认证
    没有加密处理,明文解码后就是用户id和密码,被盗可能性极高。另外,进行一次认证后,一般浏览器无法实现认证注销操作。
  • DIGEST认证
    质询/响应的方式,一方发送认证请求,收到质询码,根据质询码生成响应码,把响应码发给对方进行认证。密码泄露的可能性就降低了。
  • SSL客户端认证
    客户端证书+表单认证组合成双因素认证。
  • FormBase认证(多半认证基于此)
    客户端发送id和password进行匹配,认证成功后的用户信息会写入Cookie里。

基于HTTP的功能追加协议

  • 消除HTTP瓶颈的SPDY
    一条连接只能发送一个请求
    请求只能从客户端开始,客户端不接收除响应外的指令
    请求/响应首部未经压缩就发送
    发送冗长的首部,每次互发相同重复的首部
    非强制压缩发送,可选任意压缩格式
  • Ajax的解决方法
    Ajax的核心技术是XMLHttpRequest的API,通过JS的调用就能和服务器进行HTTP通信。从而实现更新局部页面。但人未解决HTTP协议本身存在的问题。
  • Comet的解决方法
    这是通过延迟应答,模拟实现服务器向客户端推送的功能。Comet会将响应挂起,当服务器的内容更新时,再返回该响应。但仍有不足。

SPDY的设计与功能

  • 多路复用流
  • 赋予请求优先级
  • 压缩HTTP首部
  • 推送功能
  • 服务器提示功能
  • 使用浏览器进行全双工通信的WebSocket
  • Web服务器管理文件的WebDAV

本文由 阿涛 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论