如何远程强制客户端清除缓存的网站?
How to Remotely force a client to purge a cached website?
我们遇到了显示旧版主页的问题。即使此后发生了变化,网页仍将始终显示旧版本。
这个问题源于我们使用的 WordPress 插件添加了一个
Last-Modified: Tue, 19 Apr 2016 15:18:40 GMT
header 回复。
找到解决此问题的唯一方法是在浏览器上强制刷新。有没有办法使所有客户端的缓存远程失效?
The Request-Response header
如果您指的是样式表或 javascript 例如,您可以更新样式表的版本,请参见下面的示例
<link rel="stylesheet" type="text/css" href="mystyle.css">
你可以改成
<link rel="stylesheet" type="text/css" href="mystyle.css?v=1.0">
请注意源代码末尾的 ?v=1.0 参数,这也适用于 Javascript。
如果您需要更新图像和内容,您可以在这里找到很多关于缓存清除的内容
Refresh image with a new one at the same url
您也可以尝试添加
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 20 Feb 2012 00:00:01 GMT">
致 HTML 页面的标题。
浏览器将遵循最初提供给它的缓存设置,您应该能够在浏览器的开发人员工具中查看缓存的 header 是什么。
例如,如果发送的内容类似于:
Cache-Control: public, max-age=86400
那么它一天就没有理由向您的服务器请求内容的更新版本。
如果服务器能够处理接收内容请求的负载,您可以确保有 ETag
和 Last-Modified
header,然后使用过期时间短,如:
Cache-Control: public, max-age=600
ETag: abcdefg
Last-Modified: Tue, 19 Apr 2016 15:18:40 GMT
然后,10分钟后浏览器会发出一个请求,询问服务器内容是否改变了。如果不是,服务器应该发出一个空的 304 Not Modified
响应来表示没有区别。所以这节省了您的带宽,但是唯一的成本是 "expensive" resource-wise 确定要发送的 headers。
如果您知道主要 HTML(或任何动态内容)会发生变化,我绝对建议您使用较小的缓存时间,因为这些缓存 header 的全部目的是允许浏览器尽快提供他们 以及 的版本,以节省 CPU 和带宽。
旁注:如果您能够以这种方式 "reach out" ,那实际上会有些可怕。
根据提供的所有信息,您缺少 Varnish HTTP Purge plugin and/or 尚未为其配置 VCL。
如果您看到主页的旧缓存版本,这意味着该页面的缓存在 Wordpress 管理中更新其内容后未被清除。
在 Wordpress 的典型场景中,您将设置最长缓存生命周期并使用类似上述的插件根据相关 Wordpress 挂钩使缓存无效。
我们遇到了显示旧版主页的问题。即使此后发生了变化,网页仍将始终显示旧版本。
这个问题源于我们使用的 WordPress 插件添加了一个
Last-Modified: Tue, 19 Apr 2016 15:18:40 GMT
header 回复。
找到解决此问题的唯一方法是在浏览器上强制刷新。有没有办法使所有客户端的缓存远程失效?
The Request-Response header
如果您指的是样式表或 javascript 例如,您可以更新样式表的版本,请参见下面的示例
<link rel="stylesheet" type="text/css" href="mystyle.css">
你可以改成
<link rel="stylesheet" type="text/css" href="mystyle.css?v=1.0">
请注意源代码末尾的 ?v=1.0 参数,这也适用于 Javascript。
如果您需要更新图像和内容,您可以在这里找到很多关于缓存清除的内容
Refresh image with a new one at the same url
您也可以尝试添加
<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">
<META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 20 Feb 2012 00:00:01 GMT">
致 HTML 页面的标题。
浏览器将遵循最初提供给它的缓存设置,您应该能够在浏览器的开发人员工具中查看缓存的 header 是什么。
例如,如果发送的内容类似于:
Cache-Control: public, max-age=86400
那么它一天就没有理由向您的服务器请求内容的更新版本。
如果服务器能够处理接收内容请求的负载,您可以确保有 ETag
和 Last-Modified
header,然后使用过期时间短,如:
Cache-Control: public, max-age=600
ETag: abcdefg
Last-Modified: Tue, 19 Apr 2016 15:18:40 GMT
然后,10分钟后浏览器会发出一个请求,询问服务器内容是否改变了。如果不是,服务器应该发出一个空的 304 Not Modified
响应来表示没有区别。所以这节省了您的带宽,但是唯一的成本是 "expensive" resource-wise 确定要发送的 headers。
如果您知道主要 HTML(或任何动态内容)会发生变化,我绝对建议您使用较小的缓存时间,因为这些缓存 header 的全部目的是允许浏览器尽快提供他们 以及 的版本,以节省 CPU 和带宽。
旁注:如果您能够以这种方式 "reach out" ,那实际上会有些可怕。
根据提供的所有信息,您缺少 Varnish HTTP Purge plugin and/or 尚未为其配置 VCL。
如果您看到主页的旧缓存版本,这意味着该页面的缓存在 Wordpress 管理中更新其内容后未被清除。
在 Wordpress 的典型场景中,您将设置最长缓存生命周期并使用类似上述的插件根据相关 Wordpress 挂钩使缓存无效。