如果您无法更改引用该文件的 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/