谷歌Chrome缓存问题

nvr*_*vrs 4 google-chrome browser-cache

我之前已经问过这个问题但没有得到答案所以我正在添加更多信息.我使用spring 3 mvc和spring security进行身份验证/授权,构建了一个对js有点沉重的在线服务.HTTPS是任何交互的要求,因此所有请求都是这样.服务器设置包含一个Apache服务器后面的一个Tomcat 7应用服务器(可能在将来添加更多),该服务器充当mod_proxy,mod_cache和mod_deflate的反向代理.为所有可缓存资源(js,css,images)设置缓存标头:

Cache-Control:max-age=604800, must-revalidate, public
Run Code Online (Sandbox Code Playgroud)

上面的标题在Firefox和IE浏览器中都有所需的结果(至少分别是我测试过的3+和8+版本),即两个浏览器都相应地缓存.js和.css文件,除非用户刷新页面以便浏览器将附加到请求标头a Cache-Control:max-age=0并将获得304回复,或强制刷新,Cache-Control:no-cache以便它将重新获取资源.另一方面,谷歌浏览器的行为有所不同,虽然它通过将jsessionid附加到用于在缓存中存储文件的密钥来缓存文件,将它绑定到分配给用户的特定会话.这导致每次用户登录/注销或关闭浏览器时都从服务器重新获取文件(Spring安全性具有临时会话和不同的记忆我).当用户访问登录屏幕并且在登录后将其重定向到主站点时,用于登录屏幕以及主站点的主要css甚至被提取两次(因为现在chrome将文件放入缓存中没有sessionid绑定到它).

nvr*_*vrs 5

我最近再次遇到这个问题,我终于找到了Chrome拒绝缓存静态资源的原因,即使标题非常好.它与会话无关,而是如果来自HTTPS URL的请求资源和服务器使用您未在可信证书库中导入的自签名证书,则不会缓存任何内容.我有