我有一个JS文件的旧版本已经缓存在用户的浏览器上,过期时间设置为10年(后来我学会了如何在我的Web服务器上正确设置过期标头)。我已经更新了JS文件,并希望我的用户从中受益。
- 除了提供另一个命名不同的JS文件外,我的Web服务器是否有办法强制用户的浏览器清除此文件的缓存?
- 如果未来没有正确设置过期标头(偏执狂),是否可以使我的JS文件自动过期并在它被缓存后一天强制重新加载?
编辑:理想情况下,我希望解决这个问题而不更改托管脚本的页面上的HTML标记。
我有一个JS文件的旧版本已经缓存在用户的浏览器上,过期时间设置为10年(后来我学会了如何在我的Web服务器上正确设置过期标头)。我已经更新了JS文件,并希望我的用户从中受益。
编辑:理想情况下,我希望解决这个问题而不更改托管脚本的页面上的HTML标记。
简而言之... 不行。
你可以在脚本标签的源地址结尾添加一些内容。浏览器会将其视为与它们当前缓存的文件不同的文件。
<script src="/js/something.js?version=2"></script>
其他选择不确定。
CACHE MANIFEST
# 2013-01-01 v1.0.0
/myjsfile.js
CACHE MANIFEST
# 2013-02-01 v1.0.1
/myjsfile.js
请务必使用发布日期或版本(或其他信息)修改缓存清单,这样当浏览器检测到清单已更改时,它将下载其中的所有文件。
如果清单未更改,则浏览器不会更新本地文件,即使该文件在服务器上已更改。
如需更多信息,请参阅HTML5应用程序缓存
你可以在你的URL中添加一个虚拟参数
<script src='oldscriptname.js?foo=bar'></script>
[e: f; b]
主要问题是,如果您使用简单的“过期”标头设置过期时间,则已缓存文件的浏览器甚至不会尝试与您联系。即使有一种方法让脚本清除浏览器缓存,您的旧脚本也没有这样做,因此您无法将该功能传递给客户端。
你可以使用JavaScript强制重新加载一个已缓存的文档:
window.location.reload(true);
True命令表示浏览器必须在没有缓存的情况下重新加载页面。