HTTP首部字段:给浏览器和服务器提供报文主体大小、语言、认证内容等诸多额外的信息
首部字段格式:字段名:字段值1 [,字段值2] [,字段值3] [....]
首部字段类型:
- 按实际用途划分:通用首部字段、请求首部字段、响应首部字段、实体首部字段
- 按是否缓存代理的行为划分:端到端首部(End to end Header)、逐跳首部(Hop by hop Header)
端到端首部:此类别的首部将转发给请求或响应的最终目标,经过代理时,也必须保存在由缓存生成的响应中,必须被转发。
逐跳首部:此类别的首部只对单次转发有效,经过缓存或代理时,将会失效。
在HTTP/1.1中的逐跳首部有8个,其余都为端到端首部,这8个为:Connection、Keep-Alive、Proxy-Authorization、Trailer、TE、Transfer-Encoding、Upgrade
(如果要使用逐跳首部,必须提供Connection字段,例如Connection:Keep-Alive
)
通用首部字段:
① Cahe-Control:操作缓存
缓存请求指令:
- no-cache:强制向服务器验证缓存有效期,无论缓存是否过期
- no-store:不使用缓存
- max-age=[秒]:接受缓存已保存的最大时间值,若缓存保存已超过该时间,则不会接受缓存(在Http/1.1中,同时存在max-age和Expires首部字段时,会忽略Expires,而在Http/1.0时,会忽略max-age)
- max-stale(=[秒]):可接受缓存的最大保存时间,不管是否过期,时间可省略
- min-fresh=[秒]:缓存的已保存时间加上该数值若未超过缓存的有效期,则可接受该缓存
- no-transform:代理不可更改媒体类型
- only-if-cached:只接受缓存资源,不会验证有效期,若无响应则返回504 网关超时状态码
缓存响应请求:
- public:表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存,即使是通常不可缓存的内容。
- private:表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)。私有缓存可以缓存响应内容,比如:对应用户的本地浏览器
- no-cache:缓存前需确定有效性
- no-store:不使用缓存
- no-transform:代理不可更改媒体类型
- must-revalidate:若缓存过期后,必须再向源服务器验证有效期,会忽略max-stale指令
- proxy-revalidate:与must-revalidate类似,但只限定于代理服务器
- max-age=[秒]:将资源作为缓存保存的最长时间,在此期间不再确认有效期
- s-maxage=[秒]:与max-age类似,但只适用于公共的缓存服务器(会忽略max-age以及Expires)
示例:Cache-Control:private,max-age=0,no-cache
② Connection:控制逐跳首部、管理持久连接
关闭持久连接:Connection:close
在旧版本http协议上维持持久连接:
Connection:keep-alive
Keep-Alive:timeout=10,max=500
③ Date:创建Http报文的日期和时间
④ Pragma:为兼容低版本Http协议的缓存字段,常与Cache-Control一起使用
Pragma:no-cache
Cache-Control:no-cache
⑤ Trailer:应用于Http/1.1分块传输编码时,说明报文主体后记录了哪些首部字段
Transfer-Encoding:chunked
Trailer:Expires
⑥ Transfer-Encoding:传输时采用的编码方式,Http/1.1仅对分块编码有效
⑦ Upgrade:使客户端或邻接服务器升级协议版本
Upgrade:TLS/1.0
Connection:upgrade
⑧ Via:追踪客户端与服务器之间的请求和响应报文的传输路径,常与Trace方法连用,详见本博客代理那一节笔记
⑨ Warning:告知用户一些关于缓存的警告信息
格式 warning:[警告码] [警告主机:端口号] ["警告内容"] (日期)
例如:
- 110 response is stale 代理返回的资源已过期
- 111 revalidation failed 验证资源失败
- 113 heuristic expiration 响应有效期大于24小时,试探性过期
- 214 transformation applied 媒体类型被代理改变