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

时间:2018-02-22 14:19:46

标签: nginx browser-cache varnish

我们遇到的问题是显示我们主页的上一版本。即使从那时起发生了变化,网页也将始终显示旧版本。

这个问题源于我们使用添加了一个的WordPress插件 Last-Modified: Tue, 19 Apr 2016 15:18:40 GMT 标题为响应。

解决此问题的唯一方法是在浏览器上强制刷新。有没有办法让所有客户端远程使该缓存无效?

The Request-Response header

3 个答案:

答案 0 :(得分:4)

如果您的意思是样式表或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页面的负责人。

答案 1 :(得分:1)

浏览器将遵循最初提供给它的缓存设置,您应该能够查看浏览器的开发人员工具以查看缓存的标头是什么。

例如,如果内容发送的内容如下:

Cache-Control: public, max-age=86400

然后它没有理由在一天内从您的服务器请求更新版本的内容。

如果服务器能够处理接收内容请求的负载,您可以确保存在ETagLast-Modified标头,然后使用较短的过期时间,例如:

Cache-Control: public, max-age=600
ETag: abcdefg
Last-Modified: Tue, 19 Apr 2016 15:18:40 GMT

然后,在10分钟后,浏览器将发出一个请求,询问服务器内容是否已更改。如果没有,服务器应发出一个空304 Not Modified响应,表示没有差异。因此,这节省了您的带宽,但是唯一的成本是“昂贵”的资源方面,它确定要发送的标头。

我绝对建议您为主要HTML(或任何动态内容)使用较小的缓存时间,如果您知道它会发生变化,因为这些缓存标题的整个目的是允许浏览器尽快使用它们拥有的版本< em>以及为您节省CPU和带宽。

旁注:如果你能够以这种方式“伸出”它,那实际上有点可怕。

答案 2 :(得分:0)

根据提供的所有信息,您Varnish HTTP Purge plugin上缺少和/或尚未为其配置VCL。

如果您看到主页的旧缓存版本,则表示在Wordpress管理员中更新其内容后,页面的缓存未被清除。

在Wordpress的典型场景中,您将设置最大缓存生命周期,并使用类似于上面提到的插件,根据相关的Wordpress挂钩使缓存无效。