如何远程强制客户端清除缓存的网站?

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

那么它一天就没有理由向您的服务器请求内容的更新版本。

如果服务器能够处理接收内容请求的负载,您可以确保有 ETagLast-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 挂钩使缓存无效。