你必须知道的常用的报文首部字段( 三 )


must-revalidate指令

你必须知道的常用的报文首部字段

文章插图
 
使用must-revalidate指令,代理会向源服务器再次验证即将返回的响应缓存目前是否仍然有效 。
若代理无法连通源服务器再次获取有效资源的话,缓存必须给客户端一条504(Gateway Timeout)状态码 。
另外,使用must-revalidate指令会忽略请求的max-stale指令(即使已经在首部使用了max-stale,也不会再有效果) 。
proxy-revalidate指令
你必须知道的常用的报文首部字段

文章插图
 
proxy-revalidate指令要求所有的缓存服务器在接收到客户端带有该指令的请求返回响应之前,必须再次验证缓存的有效性 。
no-transform指令
你必须知道的常用的报文首部字段

文章插图
 
使用no-transform指令规定无论是在请求还是响应中,缓存都不能改变实体主体的媒体类型 。
这样做可防止缓存或代理压缩图片等类似操作 。
Cache-Control扩展
cache-extension token
你必须知道的常用的报文首部字段

文章插图
 
通过cache-extension标记(token),可以扩展Cache-Control首部字段内的指令 。
如上例,Cache-Control首部字段本身没有community这个指令 。借助extension tokens实现了该指令的添加 。如果缓存服务器不能理解community这个新指令,就会直接忽略 。因此,extension tokens仅对能理解它的缓存服务器来说是有意义的 。
Connection
Connection首部字段具备如下两个作用 。
你必须知道的常用的报文首部字段

文章插图
 

你必须知道的常用的报文首部字段

文章插图
 
在客户端发送请求和服务器返回响应内,使用Connection首部字段,可控制不再转发给代理的首部字段(即Hop-by-hop首部) 。
管理持久连接
你必须知道的常用的报文首部字段

文章插图
 
HTTP/1.1版本的默认连接都是持久连接 。为此,客户端会在持久连接上连续发送请求 。当服务器端想明确断开连接时,则指定Connection首部字段的值为Close 。
你必须知道的常用的报文首部字段

文章插图
 
HTTP/1.1之前的HTTP版本的默认连接都是非持久连接 。为此,如果想在旧版本的HTTP协议上维持持续连接,则需要指定Connection首部字段的值为Keep-Alive 。
Date
首部字段Date表明创建HTTP报文的日期和时间 。
你必须知道的常用的报文首部字段

文章插图
 
HTTP/1.1协议使用在RFC1123中规定的日期时间的格式
你必须知道的常用的报文首部字段

文章插图
 
之前的HTTP协议版本中使用在RFC850中定义的格式
你必须知道的常用的报文首部字段

文章插图
 
除此之外,还有一种格式 。它与C标准库内的asctime()函数的输出格式一致 。
你必须知道的常用的报文首部字段

文章插图
 
Pragma
Pragma是HTTP/1.1之前版本的历史遗留字段,仅作为与HTTP/1.0的向后兼容而定义 。
规范定义的形式唯一
你必须知道的常用的报文首部字段

文章插图
 
该首部字段属于通用首部字段,但只用在客户端发送的请求中 。客户端会要求所有的中间服务器不返回缓存的资源 。
你必须知道的常用的报文首部字段

文章插图
 
所有的中间服务器如果都能以HTTP/1.1为基准,那直接采用Cache-Control: no-cache指定缓存的处理方式是最为理想的 。但要整体掌握全部中间服务器使用的HTTP协议版本却是不现实的 。因此,发送的请求会同时含有下面两个首部字段 。
你必须知道的常用的报文首部字段

文章插图
 
Trailer
你必须知道的常用的报文首部字段

文章插图
 
首部字段Trailer会事先说明在报文主体后记录了哪些首部字段 。该首部字段可应用在HTTP/1.1版本分块传输编码时 。
你必须知道的常用的报文首部字段

文章插图
 
以上用例中,指定首部字段Trailer的值为Expires,在报文主体之后(分块长度0之后)出现了首部字段Expires 。


推荐阅读