Chrome缓存像一个疯狂的浏览器

35

我有一个网站服务,像大多数其他服务一样,使用js和css文件。 我采用旧的技巧,在js和css文件后附加版本号,例如; ?v = 123,并且每次在生产环境更新服务时都会更改。

现在,这在所有浏览器上都可以正常工作,除了Chrome。 Chrome似乎更喜欢缓存的版本而不是获取新版本,因此似乎忽略了附加的变量。 在某些情况下,强制刷新缓存(cmd+r / ctrl+f5)不足以解决问题,所以我必须进入选项并清除缓存才能加载新内容。

是否有人在Chrome中遇到过这个问题? 如果有,问题的解决方法是什么?

3个回答

14

Chrome应将具有不同查询字符串的请求视为不同的请求;对于style.css?v=123的缓存结果,绝不能用于style.css?v=124。如果您看到不同的行为,请在http://new.crbug.com/上报告错误,并在此处发布错误ID。

话虽如此,我首先会检查页面是否被缓存了比您预期更长的时间。如果页面本身的新版本没有被下载,则它仍会请求?v=123,因为HTML没有改变。如果您正在使用长期有效的缓存标头发送页面,则Chrome可能会将其缓存得比您预期的更积极。如果您看到这种行为,请收藏http://crbug.com/8742以获取更新。


确实。检查已加载的HTML页面的源代码(查看源代码),查看使用Chrome开发者工具栏请求了哪些资源。我怀疑这不是Chrome的错误,尽管过度缓存可能是一个讨厌的“特性”。 - ivy
太棒了,Mike!页面本身发送的标头可能会请求比我们想要的更长的缓存时间,这一点并不让我感到惊讶。我不记得有研究过这个问题,所以这是我要做的第一件事。再次感谢! - Magnus
我的问题是我们没有设置expires/cache-control头。在尝试更激进的方法之前,一定要检查这些是否已经设置。 - FuriousFolder

5

我也有同样的经历。

您可以在Chrome和Mozilla中使用Ctrl + Shift + R进行无缓存浏览。


1

我也曾有过这样的经历。

我运营一个会员网站,如果用户未登录或尝试查看其会员级别不允许的内容,则显示“您必须以Gold会员身份登录才能查看此内容”的类似内容。但即使用户已经登录,由于Google Chrome的强制缓存,用户仍然会看到“您需要登录”的提示。然而,在Firefox中,我测试了所有5个会员级别的登录和注销,并且每个级别都可以正确显示相应内容。

虽然Chrome的缓存问题可以通过在用户登录和注销时清除缓存来解决,但采取这种方法真的很烦人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接