3

我最近向我的站点添加了 HTTP 标头,以通知浏览器在每次遇到给定的 JS/CSS URL 时与服务器进行检查。我已经对其进行了测试,并且效果很好;现在所有浏览器都发出条件GET请求。

但问题是——人们仍然缓存了旧的标头;标题或多或少告诉浏览器“永远缓存这个;不要费心要求更新!”。这可以通过硬刷新来解决。在我们推出代码后,我不想与每个人交流,请在任何错误页面上按 F5。

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

随着越来越多的人清除缓存或学会自己刷新,这个问题最终会自行解决。但是,我宁愿现在修复它。然后在一个月左右的时间里,我将删除 HTML 级别的标头,以便在我想要的地方进行缓存——基于每个资源。

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

4

2 回答 2

1

将参数传递给脚本源,这将强制重新加载脚本......事实上你可以通过版本或类似来做到这一点

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

这对其他用户来说是可行的,而且看起来很简单......当你觉得它已经足够长的时候回到旧的方式。但如果您想强制用户刷新,这将起作用。

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

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

于 2012-06-12T19:30:35.897 回答
1

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

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

some-name.css?q=1

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

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

my-new-name.css

于 2012-06-12T19:31:46.863 回答