从JavaScript文件中强制缓存过期

10

我有一个JS文件的旧版本已经缓存在用户的浏览器上,过期时间设置为10年(后来我学会了如何在我的Web服务器上正确设置过期标头)。我已经更新了JS文件,并希望我的用户从中受益。

  • 除了提供另一个命名不同的JS文件外,我的Web服务器是否有办法强制用户的浏览器清除此文件的缓存?
  • 如果未来没有正确设置过期标头(偏执狂),是否可以使我的JS文件自动过期并在它被缓存后一天强制重新加载?

编辑:理想情况下,我希望解决这个问题而不更改托管脚本的页面上的HTML标记

4个回答

19

简而言之... 不行。

你可以在脚本标签的源地址结尾添加一些内容。浏览器会将其视为与它们当前缓存的文件不同的文件。

<script src="/js/something.js?version=2"></script>

其他选择不确定。


这种方法的缺点是它强制我改变标记。一些其他网站已经部署了我的脚本,我不想让他们改变他们的代码。 - Bilal and Olga
2
写一篇坦白的博客文章,讨论冒失的内容缓存决策所带来的风险,这将为你带来收益。我会在 Reddit 上宣传它。 - Pointy

8
在HTML5中,您可以使用应用程序缓存(Application Cache),这样您就可以控制缓存何时过期。
您需要添加到清单的路径。 在您的demo.appcache文件中,您可以将要缓存的每个文件放置在其中。
CACHE MANIFEST
# 2013-01-01 v1.0.0
/myjsfile.js

当您希望浏览器下载新文件时,您可以更新清单。
CACHE MANIFEST
# 2013-02-01 v1.0.1
/myjsfile.js

请务必使用发布日期或版本(或其他信息)修改缓存清单,这样当浏览器检测到清单已更改时,它将下载其中的所有文件。

如果清单未更改,则浏览器不会更新本地文件,即使该文件在服务器上已更改。

如需更多信息,请参阅HTML5应用程序缓存


1

你可以在你的URL中添加一个虚拟参数

<script src='oldscriptname.js?foo=bar'></script>

[e: f; b]

主要问题是,如果您使用简单的“过期”标头设置过期时间,则已缓存文件的浏览器甚至不会尝试与您联系。即使有一种方法让脚本清除浏览器缓存,您的旧脚本也没有这样做,因此您无法将该功能传递给客户端。


0

你可以使用JavaScript强制重新加载一个已缓存的文档:

window.location.reload(true);

True命令表示浏览器必须在没有缓存的情况下重新加载页面。


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