HTTP报文内的HTTP信息
1.HTTP报文
用于HTTP协议交互的信息称为HTTP报文
大致分为报文首部和报文主体,由空行(CR+LF)划分
2.请求报文和响应报文的结构
请求报文 报文首部
- 请求行
- 请求首部字段
- 通用首部字段
- 实体首部字段
- 其他
响应报文 报文首部
- 状态行
- 响应首部字段
- 通用首部字段
- 实体首部字段
- 其他
首部内容由以下数据组成:
- 请求行:包含用于请求的方法,请求URI和HTTP版本
- 状态行:包含表明响应结果的状态码,原因短语和HTTP版本
- 首部字段:包含请求和响应的各种条件和属性的各类首部 四种首部:通用首部,请求首部,响应首部,实体首部
- 其他:可能包含HTTP的RFC里未定义的首部 (Cookie等)
3.编码提升传输速率
报文主体和实体主体的差异
报文:是HTTP通信中的基本单位,由8位组字节流组成,通过HTTP通信传输
实体(entity):作为请求或相应的有效荷载数据(补充项)被传输,其内容由实体首部和实体主体构成
HTTP报文主体用于传输请求或者响应的实体主体
压缩传输的内容编码
有以下几种常用的内容编码:
- gzip(GUN zip)
- compress(UNIX系统的标准压缩)
- deflate(zlib)
- identity(不进行编码)
分割发送的分块传输编码
传输大量数据时,通过把数据分割成多块,可以让浏览器逐步显示页面
把实体主体分块的功能称为分块传输编码
每一块用十六进制来标记块的大小,而实体主体的最后一块会使用“0(CR+LF)”来标记
4.发送多种数据的多部分对象集合
邮件包括文字以及各种附件,采用了MIME(多用途英特网邮件扩展)机制
HTTP也采纳了 多部分对象集合(Multipart)
包含的对象如下:
- multipart/form-data:在Web表单文件上传时使用
- multipart/byteranges:状态码206响应报文包含了多个范围的内容时使用
在HTTP报文中使用多部分对象集合时,需要在首部字段里加上 Content-type
使用boundary字符串来划分多部分对象集合指明的各类实体。在boundary字符串指定的各个实体的起始行之前插入“--”,而在多部分对象集合对应的字符串最后插入“--”标记做为结束。
5.获取部分内容的范围请求
恢复 恢复之前中断的下载
范围请求:指定范围发送的请求
对于一份10000字节大小的资源,可以只请求5001-10000的范围
GET /yip.jpg HTTP/1.1
Host:www.usagidesign.jp
Range:bytes=5001-10000
用Range来指定资源的byte范围:
- 5001-10000字节
Range:bytes=5001-10000
- 从5001字节之后全部
Range:bytes=5001-
- 从一开始到3000,5000~7000字节的多重范围
Range:bytes=0-3000,5000-7000
针对范围请求,响应会返回状态码为206 Partial Content的响应报文
针对多重范围请求,响应会在首部字段Content-Type标明multipart/byteranges后返回响应报文
如果服务器无法响应范围请求,则会返回状态码200 OK和完整的实体内容
6.内容协商返回最合适的内容
浏览器内容相同但使用的语言不同,当浏览器默认英文时,访问相同URI的Web页面时,会显示对应的英文版本。该机制为内容协商
内容协商机制:指客户端和服务器就响应内容进行交涉,然后提供给客户端最为合适的资源。以语言,字符集,编码方式等为基准判断响应的资源
包含在请求报文中的某些首部字段就是判断标准:
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
内容协商技术有以下三种类型
- 服务器驱动协商:由服务器端进行内容协商,以请求首部字段为参考,在服务器端自动处理
- 客户端驱动协商:有客户端进行内容协商的方式,用户从浏览器现实的可选项目组手动选择
- 透明协商:以上结合,是由服务器和客户端各自进行内容协商的一种方法