大纲

HTTP报文
分类
HTTP报文:用于HTTP协议交互的信息
请求报文:请求端(客户端)的HTTP报文
响应报文:响应端(服务器端)的HTTP报文
结构

报文可分为报文首部、空行(CR+LF)、报文主体,通常,不一定要有报文主体。
请求报文>>请求行:包含用于请求的方法,请求URI和HTTP版本
响应报文>>状态行:包含表明响应结果的状态码,原因短语和HTTP版本
首部字段:包含表示请求和响应的各种条件和属性的各类首部
首部字段分类:通用首部、请求首部、响应首部和实体首部
提升传输速率
报文主体和实体主体
报文:HTTP通信的基本单位,由8位组字节流组成,通过HTTP通信传输
实体:作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体组成
HTTP报文的主体:用于创数请求或响应的实体主体
通常,报文主体等于实体主体,只有当传输中进行编码操作时,实体主体的内容发生变化,才有差异
压缩传输的内容编码
概念:类似于邮件的发送,为了减少邮件容量,通常使用ZIP压缩文件后以附件的形式发送。这种方法在HTTP中称为内容编码
内容编码:指明应用在实体内容上的编码格式,并保持实体信息原样压缩。内容编码后的实体由客户端接收并负责解码
内容编码分类:gzip、compress、deflate、identity

分割发送的分块传输编码
原由:在HTTP通信过程中,请求的编码实体资源没有全部传输完成之前,浏览器无法显示请求页面。
传输编码
Chunked Transfer Coding
主题实体分块功能:在传输大容量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面

过程:
分块传输编码:将实体主体分成多个部分。每一部分都会用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记
使用分块传输编码的实体主体会由接受的客户端负责解码,恢复编码前的实体主体
HTTP/1.1中存在的传输编码机制只定义作用于分块传输编码中
多种数据的多部份对象集合
MIME(多用途因特网邮件扩展):允许邮件处理文本、图片、视频等多个不同类型的数据
例子:图片等二进制数据以ASCII码字符串编码的方式指明,就是利用MIME来描述标记数据类型。
而MIME扩展中会使用一种称为多部份对象集合的方法,来容纳多份不同类型的数据。
分类
multipart/form-data:在web表单文件上传时使用
multipart/byteranges:状态码206响应报文包含了多个范围的内容时使用
multipart/form-data

multipart/byteranges


在HTTP报文中使用多部分对象集合时,需要在首部字段里加上Content-type
获取部分内容的范围请求
原由:网络速度慢,下载大容量文件时遇到网络中断问题,需要重头开始
解决方案:需要一种客回复的机制。从之前下载中断处恢复下载
实现:指定下载的实体范围,使用Range来指定资源的byte范围
从x到y
Range:bytes = x - y
从x之后
Range:bytes = x -
从一开始到x和y-z的多重范围
Range:bytes = -x, y - z
针对范围请求,响应会返回状态码为206Partial Content的响应报文。对于多重范围的范围请求,响应会在首部Content-Type标明multipart/byteranges后返回响应报文。
如果服务器端无法响应范围请求,则会返回状态码200 OK和完整的实体内容
返回内容协商
原由:同一个web网站存在多份相同内容的页面,例如英文版和中文版
内容协商:当浏览器的默认语言为英语或中文,访问相同的URI的WEB页面则会显示相应的语言版本WEB页面
内容协商机制:客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源,内容协商会以响应资源的语言、字符集、编码方式等作为判断的基准
判断的基准:包含在请求报文中某些首部字段
Accept
Accept-Charset
Accept-Encoding
Accept-Language
Content-Language
类型
