HTTP报文
用于HTTP协议交互的信息被称为HTTP报文,客户端的HTTP报文叫做请求报文,服务端的叫做响应报文
HTTP报文结构
请求报文(上)和响应报文的结构(下)
请求行:包含用于请求的方法,请求的URI和HTTP版本
响应报文实例
首部字段:通用首部、请求首部、响应首部和实体首部
其他:可能包含HTTP的RFC里未定义的首部(Cookie等)
报文主体和实体主体的差异
报文:HTTP通信中的基本单位,由8位字节流组成,通过HTTP通信传输
实体:由实体首部和实体主体组成,是有效载荷数据
通常,报文主体等于实体主体,只有当传输中进行编码时,实体主体的内容才发生变化,才导致发生差异
压缩传输的内容编码
内容编码是指应用在实体主体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并负责解码,它是HTTP协议的功能
内容编码
常见的内容编码有以下几种:
gzip(GNU zip)
compress(UNIX系统的标准压缩)
deflate(zlib)
identity(不进行编码)
分割发送的分块传输编码
分块传输编码:在传输大量数据时,通过把数据分割成多块,能够让浏览器逐步显示页面
分块传输编码
1)分块传输编码将实体主体分成多块,每一块都会用十六进制来标记块的大小,最后一块使用“0(CR+LF)”来标记
2)使用分块传输编码的实体主体由接收的客户端负责解码,恢复到解码前的实体主体
3)HTTP1.1中存在一种称为传输编码的机制,它可以在通信时按照某种编码方法进行传输,但只定义在分块传输编码中
发送多种数据的多部分对象集合
HTTP协议中采纳了多部分对象集合,发送的一份报文主体内可含有多类型的实体,在HTTP报文的首部字段里加上Content-Type
多部分对象集合包含的对象:multipart/form-data、multipart/byteanges
multipart/form-data:在Web表单上传时使用
multipart/byteanges:状态码206的响应报文中包含了多个范围的内容时使用
multipart/form-data实例:
Content-Type: multipart/form-data; boundary=AaB03x
--AaB03x
Content-Disposition: form-data; name="field1"
Joe Blow
--AaB03x
Content-Disposition: form-data; name="pics"; filename="file1.txt"Content-Type: text/plain ...(file1.txt的数据)...
--AaB03x--
multipart/byteanges实例:
HTTP/1.1 206 Partial ContentDate:
Fri, 13 Jul 2012 02:45:26 GMT
Last-Modified: Fri, 31 Aug 2007 02:02:20 GMT
Content-Type: multipart/byteranges; boundary=THIS_STRING_SEPARATES
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 500-999/8000
...(范围指定的数据)...
--THIS_STRING_SEPARATES
Content-Type: application/pdf
Content-Range: bytes 7000-7999/8000...(范围指定的数据)...-
-THIS_STRING_SEPARATES--
由上两个实例中:通过boundary字符串来划分多部分对象集合指明的各类实体,在指定的字符串前插入"--"标记开始,也作为结束标记,boundary=AaBO3x,则划分的字符串为--AaBO3x
获取部分内容的范围请求
指定范围发送的请求叫做范围请求,在首部字段中添加Range,如:Range:bytes = 5001-10000,即获取5001-10000字节的内容,也可写为Range:bytes = 3000,5000-7000,即从开始到3000字节和5000到7000字节的多重范围
采用首部字段Range来指定资源的byte范围
针对范围请求,响应会返回状态码206Partial Content的响应报文,如果服务器无法响应范围请求,则会返回状态码200 OK 和完整的实体内容
内容协商机制
当浏览器的默认语言为中文或英文时,访问相同的URI的Web页面时,则会显示对应的中文版或英文版,这种机制称为内容协商机制(Content Negotiation)
内容协商机制会以响应资源的语言、字符集、编码方式等作为判断的基准
内容协商技术有以下三种类型:
1)服务器驱动协商:由服务端进行协商,以请求的首部字段为参考,在服务端自动处理
2)客户端驱动协商:由客户端进行协商,在用户的浏览器显示的可选项中手动选择,还可利用JavaScript脚本在Web页面上自动进行上述选择
3)透明协商:是服务端驱动和客户端驱动的结合,由各自进行协商
网友评论