跳转到内容
搜索文档

Cloudflare 缓存响应

最后更新 查看 MarkdownAgent 设置

CF-Cache-Status 标头输出指示资源是否已缓存。要调查此标头返回的缓存响应,请使用 Redbotwebpagetest.orgCloudflare Optics 插件等可视化工具。

以下是对 Cloudflare 缓存响应状态的全面说明。

HIT

在 Cloudflare 缓存中找到资源。

MISS

在 Cloudflare 缓存中未找到资源,从源站 Web 服务器提供。

NONE/UNKNOWN

Cloudflare 生成了表示资源不符合缓存条件的响应。这可能是因为:

  • Worker 生成响应而未发送任何子请求。在这种情况下,响应不是来自缓存,因此缓存状态为 none/unknown

  • Worker 请求发出子请求(fetch)。在这种情况下,子请求会记录缓存状态,而主请求记录为 none/unknown 状态(主请求未命中缓存,因为 Workers 位于 cache 之前)。

  • WAF 自定义规则被触发以阻止请求。响应来自 Cloudflare 全球网络,在到达 cache 之前。由于没有缓存状态,Cloudflare 记录为 none/unknown

  • 重定向规则Always Use HTTPS 导致全球网络响应重定向到另一个资源/URL。此重定向响应在请求到达 cache 之前发生,因此缓存状态为 none/unknown

EXPIRED

在 Cloudflare 缓存中找到资源但已过期,从源站 Web 服务器提供。

STALE

从 Cloudflare 缓存提供资源但已过期。Cloudflare 无法联系源站 Web 服务器获取更新的资源。

BYPASS

Cloudflare 在请求时认为资源符合缓存条件——要么因为它匹配默认缓存的文件扩展名,要么因为 Cache Rule 为其启用了缓存——但源站响应最终不可缓存。

源站响应被视为不可缓存的常见原因包括:

  • 源站 Web 服务器返回设置为 no-cacheno-storeprivateCache-Control 标头。源站 Cache-Control 指令仅在启用 Origin Cache Control 时生效,特定指令可能导致不同的缓存状态(例如,启用 Origin Cache Control 时 max-age=0 会缓存并重新验证)。有关完整行为,请参阅 Conditions
  • 源站 Web 服务器返回 Set-Cookie 标头。
  • 对源站 Web 服务器的请求包含 Authorization 标头(在某些情况下)。

BYPASS 表示不缓存的决定是在响应时做出的——请求最初符合缓存条件,但源站响应或响应标头指示 Cloudflare 不要缓存。例如,设置 "cache": true 的 Cache Rule 在请求时启用缓存,但如果源站返回 Cache-Control: no-store,响应将为 BYPASS。

REVALIDATED

源站通过条件请求(If-Modified-SinceIf-None-Match)确认缓存资源未更改,响应从 Cloudflare 缓存提供。此状态反映同步验证路径——请求在提供之前等待源站响应。

使用异步 stale-while-revalidate 时,大多数重新验证现在返回 UPDATINGHIT。在以下情况下会看到 REVALIDATED:未设置 stale-while-revalidate;或 must-revalidateno-cache(启用 Origin Cache Control 时)等指令阻止提供 stale 内容。

UPDATING

资源已过期但从 Cloudflare 缓存提供,同时源站在后台更新它。UPDATING异步 stale-while-revalidate 重新验证期间的预期状态——重新验证窗口内的所有请求接收 UPDATINGHIT,而非等待源站。

DYNAMIC

Cloudflare 在请求时确定资源不符合缓存条件,因此请求直接前往源站 Web 服务器,未进行缓存查找。

这通常发生在:

使用 Cache Rules 更改 Cloudflare 缓存的内容。一旦请求被视为符合缓存条件,CF-Cache-Status 标头将反映响应时的缓存决定(HITMISSEXPIREDREVALIDATEDBYPASS 等)——有关源站响应最终不可缓存的情况,请参阅 BYPASS

这篇文档对您有帮助吗?