HTTP头 - 强制刷新JavaScript / CSS

3
我最近在我的网站上添加了HTTP标头,以通知浏览器每当遇到给定的JS / CSS URL时都要与服务器检查。我已经测试过它,它完美地工作;现在所有浏览器都会进行有条件的GET请求。
但问题在于 - 人们仍然将旧标头缓存下来。这些标头或多或少告诉浏览器“永久缓存此内容;不要再更新了!”。可以通过强制刷新来解决这个问题。我不想要求每个人在我们发布代码后都按F5键从而更新页面。
HTML文档本身是否有任何HTTP标头/ HTML元标记可以用来告诉浏览器“忽略JS/CSS文件上的标头并下载此页面中所有包含的文件的最新版本”?
随着越来越多的人清除其缓存或学会自行刷新,这个问题最终会得到解决。但是,我宁愿现在就修复它。然后在一个月左右,我将删除HTML级别的标头,以实现所需的缓存 - 按资源为基础。
注:我不想重命名资源或添加查询参数。我们曾经使用过这种方法(?v = 18、?v = 19等),但每次更新资源都需要手动增加那个数字,这很麻烦。即使从程序上来实现,这也不是理想的解决方案;特别是由于我们的服务器已经正确配置。更有意义的是在HTTP级别上进行操作,因此无论如何访问它 - 从页面中包含、直接从地址栏中访问或其他方式 - 都可以使用。

1
也许可以更改样式表的名称,然后更改HTML以加载不同的样式表? - Marvo
2个回答

1

将一个参数传递到脚本源,强制重新加载脚本...实际上,您可以通过版本或类似方式来执行此操作

<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


值得一提的是,您可以保留“永久”缓存头,只需在需要更改时按此方式对文件名进行版本控制。 - goat
@rambocoder:是的,应该提到这一点。这就是为什么版本控制通常以这种方式进行(可以指定新版本并加载;如果需要,仍然可以指定旧版本)。 - Andrew Leach

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