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属性。浏览器如何处理这种情况?缓存现在被认为是新鲜的多长时间了?
答案 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)