没有“上次修改”的HTTP标头 - >然而缓存?

时间:2011-03-29 19:02:40

标签: http caching http-headers

从浏览器的角度来看,

如果在没有Last-Modified HTTP标头字段的情况下提供组件(图像,脚本,样式表...)会发生什么......

由于缺少日期/时间信息,即使它将来无法执行有效性检查(If-Modified-Since),它是否会被浏览器缓存?

例如:

GET /foo.png HTTP/1.1
Host: example.org
--
200 OK
Content-Type: image/png

...

是否缓存了foo.png

-

您是否知道我可以自己编写的原始HTTP响应服务的任何在线服务,以便测试我的要求?

谢谢。

3 个答案:

答案 0 :(得分:5)

一般来说,响应可以进行缓存,除非他们明确表示不能(例如,使用缓存控制:无存储)。

但是,大多数缓存都不会存储没有基于新鲜度的内容的响应,例如Cache-Control,Expires或Last-Modified。

有关完整规则,请参阅:   http://tools.ietf.org/html/draft-ietf-httpbis-p6-cache-13#section-2.1

请参阅:   http://www.mnot.net/blog/2009/02/24/unintended_caching 例如,这会让一些人感到惊讶。

答案 1 :(得分:4)

,即使没有Last-Modified响应标头,图片也可能会被缓存。

然后,浏览器将缓存图像,直到其TTL过期。您可以使用适当的响应标头设置图像的生存时间,例如这会将TTL设置为一小时:

Cache-Control: max-age=3600
Date: Tue, 29 Mar 2011 20:18:17 GMT
Expires: Tue, 29 Mar 2011 21:18:17 GMT

即使响应中没有任何Last-Modified,浏览器仍可能会对后续Date次请求使用If-Modified-Since标头。

答案 2 :(得分:2)

我在大型网站上禁用了Last-Modified标头,FF 13没有从缓存中获取内容,尽管给出了max-age等。没有Last-Modified标头的内容总是在请求时获得状态200 ok而不是304.所以浏览器在缓存中查找它。