【问题标题】:Google Chrome cache problem谷歌浏览器缓存问题
【发布时间】:2011-08-18 08:03:31
【问题描述】:

我之前问过这个问题,但没有得到答案,所以我添加了更多信息。 我使用 spring 3 mvc 和 spring security 进行身份验证/授权构建了一个对 js 有点重的在线服务。 HTTPS 是任何交互的要求,因此它适用于所有请求。服务器设置由一个 Apache2 服务器后面的单个 Tomcat 7 应用服务器(将来可能会添加更多)组成,该服务器充当具有 mod_proxy、mod_cache 和 mod_deflate 的反向代理。为所有可缓存资源(js、css、图像)设置缓存标头:

Cache-Control:max-age=604800, must-revalidate, public

上述标头在 Firefox 和 IE 浏览器(至少分别是我测试过的版本 3+ 和 8+)中都有预期的结果,即除非用户刷新页面,否则两个浏览器都会相应地缓存 .js 和 .css 文件所以浏览器会在请求头上附加一个Cache-Control:max-age=0,并得到一个304回复,或者用Cache-Control:no-cache强制刷新,这样它就会重新获取资源。 另一方面,谷歌浏览器的行为有所不同,尽管它缓存了文件,但它通过将 jsessionid 附加到用于将文件存储在缓存中的键上,将它们绑定到分配给用户的特定会话。这会导致每次用户登录/注销或关闭浏览器时从服务器重新获取文件(Spring security 有一个临时 sessionid 和一个不同的记住我的)。当用户访问登录屏幕和登录后被重定向到主站点时,用于登录屏幕和主站点的主 css 甚至被提取了两次(因为现在 chrome 将缓存中没有sessionid 绑定到它)。

【问题讨论】:

  • 我想我总是可以使用谷歌库来至少加载基本库并部分绕过这个问题,但仍然不理想。
  • 在这里重新提出相同的问题是不可接受的行为。如果您想引起注意您的问题,两天后您将被允许place a bounty on it。您也可以edit your question添加更多信息,这可能会使您的问题更容易理解和回答。

标签: google-chrome browser-cache


【解决方案1】:

我最近又遇到了这个问题,我终于弄清楚了 Chrome 拒绝缓存静态资源的原因,即使标题非常好。 它与会话无关,相反,如果您从 HTTPS URL 请求资源并且服务器使用您未在受信任的证书存储中导入的自签名证书,则它不会缓存任何内容。我有

【讨论】:

  • 好消息:无效证书!
【解决方案2】:

最后标记no-transform 有帮助吗?

Cache-Control:max-age=604800, must-revalidate, public, no-transform

【讨论】:

  • 感谢您的回复,但没有。
猜你喜欢
  • 1970-01-01
  • 2011-03-23
  • 2012-12-13
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 2013-10-14
  • 2011-11-01
  • 2018-09-05
相关资源
最近更新 更多