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

Mog*_*og0 5 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢

Kyl*_*ane 0

我遇到了同样的问题,但它不是 Webkit 范围内的;Safari 和 Chrome 在隐身模式下运行良好。我尝试禁用所有扩展,这没有什么区别,但清除整个缓存似乎已经修复了它。

我的猜测是,如果您第一次将 Cache-Control 标头添加到您的网站,那么 Chrome 不会正确覆盖其缓存中的旧标头。这会给现有用户正确使用新的缓存设置带来一些问题。