如果不能更改引用HTML文件的URI(例如,不能添加时间戳参数),有没有办法强制客户端的缓存重新加载该文件?
这是我的情况:
- 一个部署到1000个用户的插件
- 该插件加载调用
script.js
的example.com/page.html
- 无法更改资源URI
example.com/page.html
(不更新插件) page.html
已更改。我需要从用户的缓存中清除旧的page.html
,以便可以加载新的page.html
有什么想法吗?Haccess?PHP API,旧的&新的page.html
呼叫打开?
谢谢!
好吧,如果浏览器已经缓存了页面,很难告诉它不要使用缓存版本,因为在确定缓存版本过时之前,它可能不会再检查了。你只需要向所有用户发送一封蜗牛邮件,通知他们按下ctrl+f5:)
不过,在提供缓存版本之前,浏览器可能至少会尝试HEAD请求来检查修改后的时间戳。在这种情况下,以下内容将帮助您。
浏览器使用HTTP标准头从web服务器协商其内容。接下来,如果你想告诉浏览器不要缓存文件,你必须发送适当的HTTP头。如果你想在PHP中做到这一点,你可以使用header
函数向浏览器发送适当的HTTP头:
header('Cache-Control: no-cache');
header('Pragma: no-cache');
如果必须通过HTML完成,您可以在页眉中执行以下操作:
<meta http-equiv="Expires" content="Tue, 01 Jan 1995 12:12:12 GMT">
<meta http-equiv="Pragma" content="no-cache">
但是,您无法确定浏览器是否会满足您的请求,即不缓存页面。还有一些其他的东西,比如电子标签之类的,但坦率地说,如果页面已经缓存,我认为这对你没有帮助。
更新
来自HTTP/1.1关于响应可缓存性的规范:
如果既没有缓存验证器也没有明确的过期时间与响应相关联,我们不希望它被缓存,但是某些缓存可能违反此预期(例如,当或者没有可用的网络连接)。
也许PHP可以用来为javascript调用添加时间戳。然后,您可以将其运行一段时间。。。。。。。。。。。例如:
check_if_cache_sshould_be_disabled.php
<?php $deployment_flag = true; // Uncomment this if you want to disable normal cache. //$deployment_flag = false // Uncomment this if you want to enable normal cache. ?>
page.php
<script src="/js/script.js<?php require('check_if_cache_should_be_disabled.php'); // File Get Contents can be used for a remote server //file_get_contents('http://yourserver.com/check_if_cache_should_be_disabled.php'); if ($deployment_flag == true) { print ( '?ts='.date() ); } ?>"></script>
您可以更改文件名,例如page_v2.html,这将使浏览器将页面加载为新页面。
这个答案可能过于简单,但您可以始终在包含文件版本的文件末尾附加一个GET值。现代浏览器通常将其作为新版本,并将忽略以前的缓存并获取最新的缓存。因此,当您希望缓存最新的代码时,您所要做的就是更新版本。
例如:
<script type="javascript" src="example.js?version=2.0.8"></script>
您甚至可以编写一个PHP脚本,当文件基于某些特定参数(如";上次更新"