1 报文实体:
1 实体首部+实体主体,两部分之间采用CRLF分隔
2 基本实体首部字段:
- Content-Type
- Content-Length
- Content-Language
- Content-Encoding
- Content-Location
- Content-Range 范围请求时用
- Content-MD5
- Last-Modified
- Expires
- Allow
- ETag
- Cache-Control
2 检测截尾
1 Content-Length来检测报文截尾;UA在接收且检测到无效长度时通知用户
2 关闭连接的办法对于持久连接并不适用:分块编码 -> 零字节块结尾
3 规则:
- 如果报文不允许带主体,则忽略Content-Length,如HEAD相应
- 如果报文有Transfer-Encoding首部,则由“零字节块”结尾
- 如果有Content-Length而没有Transfer-Encoding,以Content-Length为准;如果有Content-Length且有Transfer-Encoding,以Transfer-Encoding为准
- 如果使用了multipart/byteranges,且无Content-Length,则报文每个部分单独说明自己长度
- 如果以上规则都不匹配,则已关闭连接表示
3 编码
Content-MD5,是在对内容进行了内容编码之后,传输编码之前计算的:
内容编码-> MD5计算 ->
3.1 内容编码:作用于实体
- gzip 通常效率最高
- compress
- deflate
- identity
3.2 传输编码:作用于整个报文
只有一种类型:分开编码 chunk
拖挂:将报文开始传输时不缺定的首部,放在最后一个分块(零字节块)之后传输
非HTTP1.1的服务器收到经传输编码的报文,返回201 Unimplemented状态码
4 过期
4.1 Expires首部
标识过期时间,使用相对时间:文档离开Server之后算起的总计时间
4.2 条件请求
验证码分类:
- 弱验证码:比如大小/最后修改时间(1s内可能修改多次)
- 强验证码:ETag/MD5
5 范围请求:断点续传!
Range:bytes=4000-
表示已经收到4000字节,从此后开始传输
6 差异编码
If-Not-Match ETag
差异生成器