如果您无法更改引用该文件的URI(例如,无法添加时间戳参数),是否有办法强制客户端缓存重新加载HTML文件?
这是我的情况:
example.com/page.html
script.js
example.com/page.html
(无插件更新)page.html
已更改。我需要清除用户缓存中的旧page.html
,以便加载新的page.html
。有什么想法吗? htaccess的?旧的&新的page.html
号召?
谢谢!
答案 0 :(得分:29)
好吧,如果页面已被浏览器缓存,则很难告诉它不要使用其缓存版本,因为在确定其缓存版本过时之前,它可能不会再次检查。您只需向所有用户发送蜗牛邮件,通知他们按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">
但是,您无法确定浏览器是否会遵守不缓存页面的请求。还有其他一些东西,比如eTags和诸如此类的东西,但坦率地说,如果页面已被缓存,我认为这不会帮助你。
<强>更新强>
来自Response Cacheability上的HTTP / 1.1规范:
如果既没有缓存验证器也没有明确的到期时间 与响应相关联,我们不期望它被缓存,但是 某些缓存可能会违反这种期望(例如,当很少时 或者没有可用的网络连接。)
答案 1 :(得分:4)
也许PHP可以用来为javascript调用添加时间戳。然后你可以运行这个持续时间...........例如:
check_if_cache_should_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>
答案 2 :(得分:0)
您可以更改文件名,例如page_v2.html,这将使borwser将页面加载为新页面。