3.1 HTTP报文
客户端的HTTP报文叫做请求报文,响应端的叫做响应报文,由多行(CR+LF作换行符)数据构成的字符串文本构成,分为首部和主体两块
3.2 请求报文及响应报文的结构

首部:
- 请求行:请求URI和HTTP版本
- 状态行:状态码、原因短语、HTTP版本
- 首部字段
-
3.3 编码提升传输速率
HTTP协议中有一种被称为内容编码的功能,保持实体信息原样压缩,实体由客户端接收并负责解码

HTTP在传输大容量数据时,通过把数据分割成多块,叫做分块传输编码。。3.4 发送多种数据的多部分对象集合
发送邮件时,可以在邮件中写入文字并添加多份附件,这是因为采用了MIME(多用途因特网邮件扩展)可以语序文本、图片、视频多种类型的数据传输。
相应的,在HTTP中也才采纳了多部分对象集合,发送的一份报文主 体内可含有多类型实体。通常是在图片或文本文件等上传时使用。 multipart/form-data
在 Web 表单文件上传时使用。
- multipart/byteranges
状态码 206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。请求部分范围的数据。
使用多部分对象集合时,要在首部加上Content-type
使用 boundary 字符串来划分多部分对象集合指明的各类实体。在boundary 字符串指定的各个实体的起始行之前插入“—”标记(例如:- -AaB03x、—THIS_STRING_SEPARATES),而在多部分对象集合对 应的字符串的最后插入“—”标记(例如:—AaB03x—、— THIS_STRING_SEPARATES—)作为结束。如下:
3.5 获取部分内容的范围请求
如何做到在之前下载中断处恢复下载,需要使用 范围请求 (Range Request)
对一份 10000 字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源。
执行范围请求时,用首部字段Range来指定资源的byte范围
针对范围请求,响应会返回状态码为 206 Partial Content 的响应报 文。另外,对于多重范围的范围请求,响应会在首部字段 Content- Type 标明 multipart/byteranges 后返回响应报文。
如果服务器端无法响应范围请求,则会返回200 OK和完整的实体内容
3.6 内容协商返回最合适的内容
访问相同URI会出现英文版和中文版的web界面,这种机制叫做内容协商(Content Negotiation),指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源,它把以下首部字段当作判断的基准:
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
内容协商技术有以下3个类型:
- Server-driven Negotiation:服务端以请求的首部字段为参考,在服务器自动处理
- Agent-driven Negotiation:用户从浏览器现实的可选项列表选择,自行切换类型
- Transparent Negotiation(透明协商):两者的结合体
