5

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

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

如果您删除 Last-Modified,则文件将在第二天被重新请求;但是第二天的请求将不再是 if-modified-since 请求,要求服务器重新发送所有内容而不仅仅是 304 标头。

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

在 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 的原始输出,所以这正是浏览器接收的内容。

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

谢谢

4

1 回答 1

0

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

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

于 2012-07-16T23:18:39.403 回答