如果不能更改引用HTML文件的URI(例如,不能添加时间戳参数),是否有办法强制客户机的缓存重新加载该文件?
我的情况是:
- 部署到1000个用户的插件
- 该插件加载调用
script.js
的example.com/page.html
- 无法更改资源URI
example.com/page.html
(不包含插件更新) page.html
已更改。我需要从用户缓存中清除旧的page.html
,以便可以加载新的page.html
。
有什么想法吗?Htaccess?新旧page.html
调用的PHP API?
谢谢!
4条答案
按热度按时间elcex8rz1#
好吧,如果网页已经被浏览器缓存了,很难告诉它不要使用缓存版本,因为在它确定缓存版本过时之前,它可能不会再检查一次。你只需要给你所有的用户发一封蜗牛邮件,通知他们按ctrl + f5:)
不过,在提供缓存版本之前,浏览器可能至少会尝试一个HEAD请求来检查修改后的时间戳,在这种情况下,以下内容将帮助您解决这个问题。
浏览器使用HTTP标准头与服务器协商内容,如果你想告诉浏览器不要缓存文件,你必须发送相应的HTTP头,如果你想在PHP中这样做,你可以使用
header
函数发送相应的HTTP头到浏览器:如果必须通过HTML完成,您可以在页面标题中执行以下操作:
但是,你无法确定浏览器是否会接受你的请求,不缓存页面。还有一些其他的东西,比如eTags等等,但坦率地说,我不认为这会帮助你,如果页面已经缓存了。
根据HTTP/1.1规范中关于响应可缓存性的内容:
如果响应既没有缓存验证器,也没有明确的过期时间,我们不希望它被缓存,但某些缓存可能会违反这一期望(例如,当很少或没有网络连接可用时)。
eit6fx6z2#
也许PHP可以用来给javascript调用添加一个时间戳,然后你可以在........................................................................................................................................................................................................................................
check_if_cache_should_be_disabled.php
page.php
uinbv5nw3#
您可以更改文件名,例如page_v2.html,这将使浏览器将该页面作为新页面加载。
kuhbmx9i4#
这个答案可能过于简单化了,但是你可以在包含文件版本的文件末尾附加一个GET值。现代浏览器通常会把它当作一个新版本,并忽略以前的缓存,获取最新的一个。所以当你想缓存最新的代码时,你所要做的就是更新版本。
例如:
您甚至可以编写一个PHP脚本,当文件根据某些特定参数(如"上次更新")更改时,该脚本会自动执行此操作。