Chrome 在 Glassfish 服务器上缓存资源时遇到问题。尽管存在 Last-Modified 标头,但不会发送 expires 和 no-cache 标头,并且资源(大约 4 MB SWF 文件)正在被 Chrome 缓存。
有时 Chrome 会得到 304 代码,而其他时候它只是简单地执行 200(来自缓存)。我了解 304 - Chrome 可能会检查最近的 Last-Modified 日期和缓存版本来决定。但其他时候它会执行 200(来自缓存),它不返回任何标题信息,并且似乎 Chrome 只是假设文件没有被修改而不是检查。
谷歌自己的网站声明如下:
HTTP/S 支持浏览器本地缓存静态资源。一些最新的浏览器(例如 IE 7、Chrome)使用启发式方法来决定将所有没有显式缓存标头的资源缓存多长时间。
但这并不能提供明确的答案。这个启发式是否在任何地方发布?我意识到可能没有一个固定的答案(比如 30 天),但一些一般性的指导方针会很有用。此外,如果设置了 Last-Modified,我不明白为什么 Chrome 不费心先检查一下。