文章目录
本文章由公号【开发小鸽】发布!欢迎关注!!!
老规矩–妹妹镇楼:
一. HTTP报文
(一) 概述
用于HTTP协议交互的信息称为HTTP报文,客户端的HTTP报文称为请求报文,服务器端的叫做响应报文,HTTP报文是由多行(用CR+LF作换行符)数据构成的字符串文本。CR是Carriage Return回车符,LF是Line Feed换行符。
(二) 报文结构
1. 概述
HTTP报文大致可分为报文首部和报文主体两块,由空行(CR+LF)来划分,通常并不一定有报文主体。
2. 请求报文
请求报文由请求首部和请求体构成,请求首部又分为请求行和请求首部字段,请求行包含用于请求的方法,请求URI和HTTP版本,如GET /index HTTP/1.1;请求首部字段包含各种类型的首部字段,一般有四种首部,通用首部,请求首部,响应首部和实体首部。
3. 响应报文
响应报文由响应首部和响应体构成,响应首部又分为状态行和响应首部字段,状态行包含表名响应结果的状态码,原因短语和HTTP版本,如HTTP1.1 200 OK;响应首部字段包含各种类型的首部字段,一般有四种首部,通用首部,请求首部,响应首部和实体首部。
(三) 编码提升传输速率
1. 概述
HTTP传输数据时可以按照数据原貌直接传输,也可以在传输过程中通过编码提升传输速率。
2. 报文主体和实体主体的差异
报文是HTTP通信的基本单位,由8位组字节流组成;实体作为请求或响应的有效载荷数据被传输,其内容由实体首部和实体主体构成。HTTP报文的主体用于传输请求或响应的实体主体,通常,报文主体等于实体主体,只有当传输中进行了编码操作时,实体主体的内容才会发生变化。
3. 压缩传输的内容编码
HTTP协议中的内容编码指明了应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接受并负责解码。常用的内容编码有gzip,compress,deflate,identity。
4. 分块传输编码
在HTTP通信中,如果请求的编码实体资源尚未传输完成之前,浏览器是无法显示请求页面的,在传输大量数据时,可以通过将数据分割为多块,让浏览器逐步显示页面。这种将实体主体分块的功能称为分块传输编码,将实体主体分割为多块,每一块都会用十六进制来标记块的大小,最后一块用0(CR+LF)标记。
(四) 多类型实体集合
HTTP协议发送的一份报文实体中可以包含多类型实体,通常在图片或文本文件等上传时使用。如multipart/form-data,multipart/byteranges。使用多类型实体集合时,需要在首部字段中加上Content-type字段,表示包含的类型,同时使用boundary字符串来划分各类型实体,在该划分符号之前插入–标记,每一个–标记代表一个类型实体,整个集合的结束标记是在划分符号之后也插入一个–标记。
(五) 范围请求
为了解决下载中断问题,HTTP可以实现资源的范围请求,只请求一部分资源,这样就可以从下载中断的位置继续下载了。需要使用Range字段来设置请求的范围,针对该请求,响应会返回状态码为206的响应报文,如果无法响应范围请求,则返回200和完整的实体内容。
(六) 内容协商
同一个Web网站可能有多份相同内容的页面,使用的语言不同,当浏览器的默认语言为中文时,访问相同URI的web页面就会显示中文的页面,这种机制称为内容协商。即客户端和服务器端就响应的资源内容进行交涉,提供给客户端最合适的资源,判断标准是语言,字符集,编码方式等。
内容协商有三种类型,一种是服务器驱动协商,以请求的首部字段为参考,在服务器端自动处理;一种是客户端驱动协商,由用于从可视化的界面选择;另一种是透明协商,有服务器端和客户端一起协商。