.htaccess 部署后强制刷新缓存

rqdpfwrv  于 2023-01-21  发布在  其他
关注(0)|答案(4)|浏览(144)

如果不能更改引用HTML文件的URI(例如,不能添加时间戳参数),是否有办法强制客户机的缓存重新加载该文件?
我的情况是:

  • 部署到1000个用户的插件
  • 该插件加载调用script.jsexample.com/page.html
  • 无法更改资源URI example.com/page.html(不包含插件更新)
  • page.html已更改。我需要从用户缓存中清除旧的page.html,以便可以加载新的page.html

有什么想法吗?Htaccess?新旧page.html调用的PHP API?
谢谢!

elcex8rz

elcex8rz1#

好吧,如果网页已经被浏览器缓存了,很难告诉它不要使用缓存版本,因为在它确定缓存版本过时之前,它可能不会再检查一次。你只需要给你所有的用户发一封蜗牛邮件,通知他们按ctrl + f5:)
不过,在提供缓存版本之前,浏览器可能至少会尝试一个HEAD请求来检查修改后的时间戳,在这种情况下,以下内容将帮助您解决这个问题。
浏览器使用HTTP标准头与服务器协商内容,如果你想告诉浏览器不要缓存文件,你必须发送相应的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等等,但坦率地说,我不认为这会帮助你,如果页面已经缓存了。

    • 更新**

根据HTTP/1.1规范中关于响应可缓存性的内容:
如果响应既没有缓存验证器,也没有明确的过期时间,我们不希望它被缓存,但某些缓存可能会违反这一期望(例如,当很少或没有网络连接可用时)。

eit6fx6z

eit6fx6z2#

也许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>
uinbv5nw

uinbv5nw3#

您可以更改文件名,例如page_v2.html,这将使浏览器将该页面作为新页面加载。

kuhbmx9i

kuhbmx9i4#

这个答案可能过于简单化了,但是你可以在包含文件版本的文件末尾附加一个GET值。现代浏览器通常会把它当作一个新版本,并忽略以前的缓存,获取最新的一个。所以当你想缓存最新的代码时,你所要做的就是更新版本。
例如:

<script type="javascript" src="example.js?version=2.0.8"></script>

您甚至可以编写一个PHP脚本,当文件根据某些特定参数(如"上次更新")更改时,该脚本会自动执行此操作。

相关问题