目的:了解HTTP通信响应和请求时怎么运作的
一、HTTP报文
HTTP报文:用于协议交互的信息被称为HTTP报文
HTTP报文大致可分为报文首部和报文主体(应被发送的数据),两者由最初出现的空行来划分,通常,并不一定要报文主体
二、请求报文和响应报文的结构
请求行:包含请求URL、请求方法、HTTP版本
状态行:状态码、原因短语、HTTP版本
首部字段:包含请求和响应的各种条件和属性的各类首部
一般有四种首部:请求首部、通用首部、响应首部、实体首部,可能包含HTTP法人RFC未定义的其他首部,例如cookie
三、编码提升传输速率
1. 报文主体和实体主体的差异
- 报文
是 HTTP 通信中的基本单位,由 8 位组字节流(octet sequence,其中 octet 为 8 个比特)组成,通过 HTTP 通信传输。
- 实体
作为请求或响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成。
HTTP 报文的主体用于传输请求或响应的实体主体。
通常,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才导致它和报文主体产生差异
2. 压缩传输的内容编码
内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码。
常见的内容编码:
- gzip(GNU zip)
- compress(UNIX 系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
3. 分割发送的分块传输编码
分块传输编码:HTTP通信过程中,请求的编码实体资源尚未传输完时,浏览器无法显示请求页面,在传输大容量数据时,通过把数据分成若干小块,每一块都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记。让浏览器逐步显示页面
四、发送多种数据的多部分对象集合
多部分对象集合:容纳多分不同类型的数据
HTTP协议中也采纳了多部分对象集合,发送一份报文主体内可能包含多类型实体,通常是在图片或文本文件上传时使用
多部分对象集合的包含的对象如下:
- multipart/form-data
在 Web 表单文件上传时使用。
- multipart/byteranges
状态码 206(Partial Content,部分内容)响应报文包含了多个范围的内容时使
在HTTP报文中使用多部分对象集合时需要在报文首部添加Content-type
五、获取部分内容的范围请求
恢复机制:从上次下载中断处开始下载。要实现恢复机制则需要制定下载实体的范围,想这样制定范围发送的请求叫范围请求
针对范围请求,响应码为206。对于多重范围的范围请求,响应会在首部字段 ContentType 标明 multipart/byteranges 后返回响应报文。如果服务器端无法响应范围请求,则会返回状态码 200 OK 和完整的实体内容。
六、内容协商返回最合适的内容
内容协商机制:是指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源。内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准。
包含在请求报文中的某些首部字段(如下)就是判断的基准
- Accept
- Accept-Chars
- Accept-Encoding
- Accept-Language
- Content-Language
内容协商技术有以下 3 种类型:
- 服务器驱动协商
- 客户端驱动协商
- 透明协商
是服务器驱动和客户端驱动的结合体,