2012-06-12 86 views
3

我最近添加了HTTP头到我的网站,以通知浏览器每次遇到给定的JS/CSS URL时检查服务器。我已经测试过它,它完美地工作。所有浏览器现在都会发送条件GET请求。HTTP头 - 硬刷新JavaScript/CSS

尽管如此,人们仍旧拥有旧的标头缓存;或多或少的告诉浏览器“缓存这永远;不要打扰要求更新!”。这可以通过硬刷新来解决。在推出代码后,我不想与任何人沟通,请在任何有问题的页面上点击F5。

是否有任何HTTP头/ HTML元标记我可以把它放在HTML文档本身来说“浏览器,忽略你在JS/CSS文件中的头文件并下载所有的最新版本本页包含的文件“?

最终,随着越来越多的人清除缓存或学习自行刷新,此问题将自行解决。但是,我现在宁愿修复它。然后,在一个月左右的时间里,我将按照每个资源的基础删除HTML级别的标头以获取所需的高速缓存。

编辑:我不想重命名资源或添加查询参数。这就是我们曾经使用过的(?v = 18,?v = 19等),每次我们更新资源时增加这个数字都是件麻烦事。即使以编程方式来做也不是理想的解决方案;特别是现在我们的服务器配置正确。在HTTP级别上执行它更有意义,因此无论您如何访问它,它都可以工作 - 包括在页面中,直接从地址栏中或其他位置。

+1

或许改变样式表的名称,然后改变HTML加载不同的片? – Marvo

回答

1

参数传递给脚本源,这将迫使脚本的重装上...其实,你可以通过版本或similiar做

<script src="/test/script/myawesomescript.js?ver=1.0&pwn=yes" ...>

,将工作,并无缝的其他用户...当你觉得它已经足够长时间了,回到旧的方式。但是如果你想强制从用户刷新,这将工作。

此方法用于防止某些框架缓存网页。让我知道你是否成功

http://css-tricks.com/can-we-prevent-css-caching/ - 这是一个链接到的概念为CSS(应在js工作) - 最大的区别是你不希望它永远不会缓存,所以不要使用时间戳,从上面使用我的风格:)享受!

1

基本上唯一的方法是让浏览器不要使用缓存的URL。

一种方法是在URL的末尾使用缓存取消虚拟参数。

some-name.css?q=1

这将迫使浏览器重新加载该文件(因为URL不在缓存),将下载的文件不会因为你的新头被缓存。 但是:您可能需要无限期地使用这个新名称,因为您无法保证一旦您再次离开虚拟参数,仍可能使用缓存版本。

另一种方法是完全重命名该文件。

my-new-name.css

+0

值得一提的是,您可以保留“永远”的缓存标头,并在需要更改时保持这种文件名版本。 – goat

+0

@rambocoder:是的,应该提到这一点。这就是为什么版本控制通常以这种方式完成的原因(可以指定新版本并加载;如果需要,旧版本仍可以指定)。 –