我正在开发一个 Web 应用程序,并且我已将 JavaScript 和 CSS 文件设置为具有远期过期时间。我向客户端发送消息,告知每个文件上次修改时间是一年前,并且每个文件将在一年后过期。问题是 Firefox 和 Chromium 似乎忽略了响应标头,并在每次重新加载页面时重新获取静态文件。
另一方面,Opera 的运行情况与预期一致。也就是说,它缓存的文件的有效期很远。
我正在使用 Ubuntu 10.04、Firefox 3.6.8 和 Chromium 5.0.375.125。Firefox 和 Chromium 是否默认配置为不缓存来自本地主机的文件?有没有办法更改此设置?有人知道还有什么原因可能导致它们不缓存吗?
这些是我发送回客户端的响应头:
Server Development/1.0
Date Tue, 31 Aug 2010 15:44:16 GMT
Content-Language en
Expires Wed, 31 Aug 2011 15:44:16 GMT
Vary Accept-Language, Cookie
Last-Modified Mon, 31 Aug 2009 15:44:16 GMT
Cache-Control max-age=31536000
Content-Type text/css
Content-Length 32493
谢谢!
答案1
回答你的问题,Chromium 和 Firefox,或者任何其他浏览器,都会缓存来自 localhost 的文件。问题是你使用的指令只是为了向后兼容而保留的。
换句话说,在过去这是可行的方法。通过将过期日期设置为遥远的过去,他们会强制浏览器不显示缓存中的页面。Chromium 和/或 Firefox 可能只是忽略了此指令。
另一方面,你还有其他一些不错的选择:
- 缓存控制:无缓存:将在从缓存中提供页面之前与服务器重新验证。
- 缓存控制:必须重新验证,浏览器应该在从缓存中提供数据之前与服务器重新验证。
- 缓存控制:无存储,不缓存,也不将页面存储在缓存文件夹中
请记住,您仍然受制于浏览器,并且每个浏览器都有自己的方式(不幸的是)来处理这些指令。
来源:缓存控制指令揭秘
您还应该阅读此处,其中解释了基本过期机制已经发生了变化:当同时使用 Expires 和 max-age 时,max-age 指令将覆盖 Expire 标头。