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