Etag属性存在,但HTTP标头中不存在Cache-control

时间:2011-06-23 08:16:23

标签: http caching etag

HTTP/1.1 200 OK
Date: Thu, 23 Jun 2011 07:59:40 GMT
Server: Apache/2.2.16 (Amazon)
Last-Modified: Thu, 23 Jun 2011 07:28:10 GMT
ETag: "68a7f-278-4a65c06e95680"
Accept-Ranges: bytes
Content-Length: 632
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8

以上是响应的http标头。它没有Cache-control属性,但具有Etag和Last-Modified属性。浏览器如何处理这种情况?缓存现在被认为是新鲜的多长时间了?

1 个答案:

答案 0 :(得分:1)

根据RFC 2616第13.2.4节:

  

13.2.4到期计算

     

为了决定是否   响应是新的或陈旧的,我们需要   比较它的新鲜度   年龄。年龄计算为
  在第13.2.3节中描述;这个   部分描述了如何计算   新鲜的生命,和   确定答复是否已过期   在下面的讨论中,值   可以任何形式表示
  适合算术运算。

     

我们使用术语“expires_value”来   表示过期的价值   头。我们使用这个词   “max_age_value”表示一个   适当的数量值   由“max-age”携带的秒数   Cache-Control的指令   响应中的标题(请参阅部分   14.9.3)。

     

max-age指令需要   优先级超过Expires,所以如果max-age   在一个回应中出现了   计算很简单:

  freshness_lifetime = max_age_value
     

否则,如果Expires存在于   响应,计算是:

  freshness_lifetime = expires_value - date_value
     

请注意,这些都不是   计算易受时钟影响   因为所有的信息都歪曲了   来自原始服务器。

     

如果没有Expires,Cache-Control:   max-age或Cache-Control:s-
  maxage(参见第14.9.3节)出现在   响应,响应确实如此   不包括其他限制   缓存,缓存可以计算一个   使用启发式的新鲜度。   缓存必须附加警告113   任何年龄超过的回应   24小时,如果没有这样的警告   已被添加。

     

另外,如果回复确实有   最后修改时间,启发式
  到期价值应该不再是   比间隔的某些部分
  自那时以来。一个典型的设置   这个比例可能是10%。

     

确定是否a的计算   响应已经过期了   简单:

  response_is_fresh = (freshness_lifetime > current_age)