当我部署版本时,我会将数字作为查询字符串添加到JavaScript和CSS文件中,如下所示?
'app/source/scripts/project.js?burst=32472938'
我正在使用上面的内容在浏览器中破解缓存。
但在Firefox中,我收到了我修改过的最新脚本。 但在Chrome中,我没有收到我修改过的最新脚本。而不是那样,我得到旧的。
但是在开发者控制台中,我看到了最新修改的突发数量。
答案 0 :(得分:7)
根据Google文档,无效和重新加载文件的最佳方法是在文件名中添加版本号,而不是查询参数:
'app/source/scripts/project.32472938.js'
另一种方法是使用ETag(验证令牌):
https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching#validating_cached_responses_with_etags
以下是如何使用Nginx设置ETag:
http://nginx.org/en/docs/http/ngx_http_core_module.html#etag
最后,有关使用Nginx和ETag的浏览器缓存的教程:
https://www.digitalocean.com/community/tutorials/how-to-implement-browser-caching-with-nginx-s-header-module-on-centos-7#step-2-%14-checking-the-default-behavior
答案 1 :(得分:2)
我不确定这些日子是否仍然适用,但过去有些情况下代理可能导致查询字符串值被忽略以用于缓存目的。 2008年的一篇文章讨论了查询字符串值不是破坏缓存目的的理想,并且最好修改文件名本身 - 所以,引用project_32472938.js代替使用查询字符串。
(在某些地方,我也看到一些关于某些客户没有看到这些更新的异常情况的讨论,但它似乎不一致 - 不一定与Chrome有关,但更可能与在特定计算机上特定安装Chrome。我当然建议您检查另一台计算机上的网站,看看问题是否在那里重复,因为您至少可以缩小它是否适用于Chrome浏览器,或者您特定安装的Chrome有问题。)
所有这一切,自2008年以来已经有一段时间了,这些日子可能不适用。但是,如果它仍然是一个问题 - 而且你无法找到解决潜在问题的方法 - 它至少提供了一种方法用来规避它。
答案 2 :(得分:1)
我不认为Chrome确实会导致问题,因为 它会破坏几乎所有的Web应用程序 (例如:https://www.google.com/search ?q =针)
可能是您的部署有点延迟,例如
或者您的Web服务器和浏览器之间有像Azure这样的CDN。
使用标准设置,Azure CDN会忽略缓存哈希的查询字符串。
答案 3 :(得分:1)
尝试这些元标记:
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="expires" content="0" />
<meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
<meta http-equiv="pragma" content="no-cache" />
答案 4 :(得分:0)
我不确定,但是试试......
google crome总是忽略它..
你需要添加一个&#39;?random.number&#39;或&#34;?date.code&#34;每次在您的网站上按下网址时,每个链接。 例如,如果&#39; myhomepage.html?272772&#39;存储在缓存中,然后生成一个新的随机数,例如&#39; myhomepage.html?2474789&#39;,谷歌浏览器将被迫寻找新的副本。