更新的内容仅在硬刷新时加载,否则加载旧内容

问题描述 投票:0回答:2

我们有一个使用 Akamai、Varnish 和 Memcache 的层压应用程序

目前我们已经更新了 404 页面,其中包含更新的内容,但它在加载/刷新时加载旧内容,并且仅在硬刷新时加载新内容 之前是有问题的 URL https://www.suncamp.co.uk/saflkjshf/

我尝试了什么: 我尝试删除 URL https://www.suncamp.co.uk 并使 akamai、varnish 和 memcache 失效,但没有成功

caching memcached varnish akamai
2个回答
1
投票

您存储在缓存中的内容具有 TTL。对于像 Varnish 这样的 HTTP 缓存,

Cache-Control
标头可用于定义该 TTL。

我发现在你的情况下,值是

Cache-Control: max-age=604794
。这意味着该对象在缓存中存活了 604794 秒。浏览器硬刷新对缓存没有影响,因为反向缓存代理的目标是拥有内容的集中缓存副本,而不是将其分布在多个浏览器缓存中。

在以下条件下,对象将从缓存中删除:

  • TTL 过期
  • 缓存已满,必须对对象进行 nuked 才能释放空间
  • 执行显式缓存失效调用以从缓存中删除选定对象

我想最后一个选项是您需要确保清空 Varnish 缓存的选项。

在 Varnish 中,我们称之为“清除”。虽然清除不是内置 VCL 的一部分,但以下教程解释了执行这些清除所需的 VCL 代码:https://www.varnish-software.com/developers/tutorials/purge/. 或者,如果您想一次从缓存中删除多个对象,

禁止

可以是解决方案。请参阅 https://www.varnish-software.com/developers/tutorials/ban/ 获取相应的教程。 一旦您设置了使 Varnish 缓存失效的工作流程,请将其绑定到 Memcached 和 Akamai 的工作流程中。这将确保各个缓存之间的缓存失效保持一致。


0
投票

还在响应中设置最后修改的标头。因此,浏览器端 TTL 结束后,浏览器始终会发送 if-modified-since 请求标头来重新验证缓存。

为所有 5xx 和 4xx 设置无缓存,并清除清漆、CDN 缓存到整个域一次。

© www.soinside.com 2019 - 2024. All rights reserved.