当提供max-age和Last-Modified标头时,Webkit不会缓存

时间:2012-02-07 13:13:14

标签: webkit http-caching

我在自定义Web服务器上编写了一个基于Web的应用程序,我遇到的问题是webkit浏览器没有缓存图像,样式表和javascript。

我已将其跟踪到Cache-Control:max-age和Last-Modified之间的某种关系。如果同时指定了两者,则webkit似乎忽略max-age标头并检查文件是否在每次使用资源时都被修改。该网站在第一页上有一个iframe,它会导致样式表等在一秒内被请求两次!

如果删除Last-Modified,则在第二天之前不会再次请求文件;然而,第二天的请求将不再是if-modified-自请求以来,要求服务器重新发送所有内容,而不仅仅是304头。

在IE9,Firefox 10.0和Opera 11.61上,浏览器正确缓存并且不会重新请求图像,只有HTML,它具有Cache-Control:no-cache标头属性。

在Chrome 16.0.912.77 m和Safari 5.1.2(7534.52.7)上,每次都会对每个页面上的每个图像发出一个条件请求。服务器以304标头响应,同样包含max-age属性,但它们都继续请求。

我通过响应发送的示例HTTP标头是:

HTTP/1.1 200 OK
Date: Mon, 06 Feb 2012 15:12:12 GMT
Cache-Control: max-age=86400
Content-length: 708
Content-type: image/gif
Last-Modified: Fri, 6 Jan 2012 14:39:07 GMT
Server: Webspring

有没有人有任何关于如何让这些浏览器尊重我的缓存标头的建议?

所有浏览器都在Win7 Pro x64上运行,上面的HTTP标头是Fiddler的原始输出,这正是浏览器正在接收的内容。

注意:在我发现这是头字段之间的交互之前,我曾问过上一个问题。我删除了之前的问题,因为它不再准确。

由于

莫古

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,但它不是Webkit; Safari和Chrome在隐姓埋名中工作正常。我尝试禁用所有没有区别的扩展,但是清除整个缓存似乎已经修复了它。

我的猜测是,如果您是第一次将Cache-Control标头添加到您的网站,则Chrome无法正确覆盖其缓存中的旧标头。这会使现有用户正确地使用新缓存设置时出现一些问题。