php - 部署后强制刷新缓存

标签 php .htaccess uri cache-control

如果您无法更改引用该文件的 URI(例如,无法添加时间戳参数),是否有办法强制客户端的缓存重新加载 HTML 文件?

这是我的情况:

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

有什么想法吗?访问?新旧 page.html 调用的 PHP API?

谢谢!

最佳答案

好吧,如果页面已经被浏览器缓存了,就很难告诉它不要使用它的缓存版本,因为在它确定它的缓存版本已经过时之前,它可能不会费心去再次检查。您只需要向所有用户发送一封普通邮件,通知他们按 ctrl+f5 :)

不过,在提供缓存版本之前,浏览器至少有可能尝试一个 HEAD 请求来检查修改后的时间戳。在这种情况下,以下内容将为您提供帮助。

浏览器使用 HTTP 标准 header 从您的 Web 服务器协商其内容。今后,如果您想告诉浏览器不要缓存文件,您必须发送适当的 HTTP header 。如果您想在 PHP 中执行此操作,您可以使用 header 函数将适当的 HTTP header 发送到浏览器:

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 规范:

If there is neither a cache validator nor an explicit expiration time associated with a response, we do not expect it to be cached, but certain caches MAY violate this expectation (for example, when little or no network connectivity is available).

关于php - 部署后强制刷新缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8937447/

相关文章:

php - MySQL/PHP 计算列中前 3 个最常见的值

php - 如何使用定义的范围将键输入数组?

php - 在 CodeIgniter(和 MVC)中调试

.htaccess - 如何在有或没有尾斜杠的情况下进行301重定向?

html - 如何重写网络服务器子目录上的绝对 Assets 路径

html - 确保万维网。或域名前的https

rest - 将特殊字符作为 URI 参数的一部分传递

android - 如何使用kotlin在android studio中将按钮与网站链接

android - 如何监听自定义 URI

javascript - 自动完成 div 不会消失 [PHP/JQuery]