Cloudflare 是否支持 stale-while-revalidate?

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

Cloudflare 记录了

Cache-Control
标头的指令列表,包括 stale-while-revalidate

  • 重新验证时陈旧=
    当出现在 HTTP 响应中时,stale-while-revalidate Cache-Control 扩展指示缓存可以为它在变得过时后出现的响应提供服务,最多可达自最初检索对象以来指定的秒数。

我将

Cache-Control
标头设置为
public, max-age=0, stale-while-revalidate=30
但我似乎从未获得缓存命中。 Cloudflare 真的支持这个吗?

caching cloudflare http-caching
3个回答
0
投票

如果您放置

max-age=0
,则实际上不会缓存任何内容,如果是这样,则没有任何内容可提供。尝试使用
max-age=1
- 这应该会在 30 秒内给出一些结果。时期。


0
投票

今天遇到了这个问题,Cloudflare 文档不是很清楚,但是在此页面的示例部分下有一条线索。

缓存控制:max-age=600,stale-while-revalidate=30

此配置表示资产在 600 秒内是新鲜的,并且可以在尝试初始同步重新验证时再提供最多 30 秒的陈旧服务,以并行对同一资源的请求。

因此,Cloudflare 确实支持该指令,但它们的实现与人们预期的有点不同。本质上,一旦缓存内容过期,向服务器发出的第一个请求将导致向您的 Origin 发出同步请求,客户端必须等待(这是大多数人不希望的行为)。

但是,有一些支持,因为对同一资源的任何并行请求(例如由其他客户端发出)将获得旧的/缓存的内容(带有

CF-Cache-Status: UPDATING
)。对此进行了测试并能够确认行为。

通过这种方式,如果您的源响应非常慢,或者缓存资源非常流行,则只有一个客户端/用户被阻止,其余的则从 Cloudflare 获取陈旧的缓存副本。总比没有好。


0
投票

不,Cloudflare 不支持

stale-while-revalidate
。他们的最后一句话是在 2022 年 1 月。

https://community.cloudflare.com/t/when-will-cloudflare-filled-support-stale-while-revalidate-with-asynchronous-background-revalidation/287764/9?u=dfabulich

首先,我们同意此功能对互联网有好处,并且我们将很快实现这一功能。目前不支持此功能的原因是长期技术债务造成的技术限制。好消息是,我们目前正在摆脱这些限制,以便我们可以安全地支持更多像这样的异步功能。同时,我感谢您的耐心等待,并期待尽快支持。

…从那时起一切都没有改变。

Cloudflare 确实有一个功能,如果你眯着眼睛稍微转一下头,看起来有点像 SWR,在该功能中,parallel 请求可以在缓慢的重新验证过程中接收陈旧的

UPDATING
内容。但该功能(这确实很有趣)默认情况下处于启用状态,并且不受 SWR 标头的影响。 (即使设置stale-while-revalidate=0也不会关闭该功能!)
我在 2018 年写了一篇关于 Cloudflare 不存在的 SWR 支持的冗长分析,但这对我没有任何好处; Cloudflare从未直接回复过此事。 

https://community.cloudflare.com/t/does-stale-while-revalidate-work/24161/6?u=dfabulich

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