我最近在我的网站上添加了HTTP标头,以通知浏览器每次遇到给定的JS / CSS URL时都要检查服务器。我测试了它,它完美地工作;所有浏览器现在都会发出条件GET
请求。
这是问题所在 - 人们仍然会缓存旧的标题;标题或多或少告诉浏览器“永远缓存这个;不要求更新!”。这可以通过硬刷新来破坏。在推出代码之后,我不想与所有人沟通,请在任何错误页面上点击F5。
是否有任何HTTP标头/ HTML元标记我可以在HTML文档本身上说“浏览器,忽略您在JS / CSS文件上的标题并下载所有的最新版本包含在此页面上的文件“?
最终,随着越来越多的人清除缓存或学会自己刷新,这个问题会自行解决。但是,我现在宁愿修复它。然后在一个月左右的时间里,我将删除HTML级别的标题,以便在每个资源的基础上进行缓存。
编辑:我不想重命名资源或添加查询参数。这就是我们以前使用的(?v = 18,?v = 19等),每次我们更新资源时都要增加这个数字。即使以编程方式进行操作也不是理想的解决方案;特别是现在我们的服务器配置正确。在HTTP级别上执行此操作更有意义,因此无论您如何访问它,它都可以正常工作 - 包含在页面上,直接来自地址栏,或者其他方式。
答案 0 :(得分:1)
将一个参数传递给脚本源,这将强制重新加载脚本......实际上你可以通过版本或类似的方式来完成
<script src="/test/script/myawesomescript.js?ver=1.0&pwn=yes" ...>
这对其他用户来说是无效的......当你觉得它已经足够长时间回到过去的方式。但如果您想强制用户刷新,这将有效。
此方法用于防止某些框架缓存网页。如果你成功了,请告诉我。
http://css-tricks.com/can-we-prevent-css-caching/ - 这里是css概念的链接(也应该在js中工作) - 最大的区别是你不希望它永远不会缓存,所以不要使用时间戳,使用我的风格喜欢从上面:)享受!
答案 1 :(得分:1)
基本上唯一的方法是让浏览器不要使用缓存的URL。
一种方法是在URL的末尾使用缓存清除伪参数。
some-name.css?q=1
这将强制浏览器重新加载该文件(因为该URL不在缓存中),并且由于您的新标头,下载的文件将不会被缓存。 但是:您可能需要无限期地使用此新名称,因为您无法保证一旦再次取消虚拟参数,仍可能会使用缓存版本。
另一种方法是完全重命名文件。
my-new-name.css