橙宝书
排障

排障:为什么 CF-Cache-Status 不是 HIT

从响应头出发区分 DYNAMIC、BYPASS、MISS,并用只读步骤定位缓存问题。

编辑与核验:橙宝书编辑团队 ·

TROUBLESHOOTING · 只读优先症状 → 证据 → 修复核验:2026-08-26

症状

你预期资源被缓存,但响应头反复不是 CF-Cache-Status: HIT。先不要清全站缓存或修改生产规则。

第一步:保留原始证据

curl -sS -D - -o /dev/null https://example.com/assets/app.css

记录状态码、CF-Cache-StatusCache-ControlSet-CookieAge 和请求 URL。对同一 URL 连续请求两次,不要在两次之间改配置。

第二步:按状态分流

DYNAMIC

Cloudflare 在查缓存之前判定该响应不具备缓存资格。先检查资源类型、Cache Rule 与 Development Mode。

BYPASS

请求原本可以进入缓存判断,但源站响应或规则阻止缓存。检查 Cache-ControlSet-Cookie 与绕过规则。

MISS

响应具备缓存资格,但当次未找到对象。相同客户端连续 MISS 才值得继续调查填充、逐出或缓存键。

NONE/UNKNOWN

响应可能由 Worker、WAF 或重定向在缓存之外生成;先确定哪个组件直接产生了响应。

不要只看 Age

Age 在某些缓存状态出现,但源站也可能发送自己的 Age。先用 CF-Cache-Status 判断路径,再把 Age 当辅助证据。

第三步:最小修复

证据先做的最小动作不要先做
DYNAMIC核对目标 URL 是否应缓存,以及 Cache Rule 是否匹配盲目 Purge Everything
BYPASS + Set-Cookie确认 Cookie 是否必要,并检查源站响应直接删除所有 Cookie
BYPASS + private/no-store与数据所有者确认隐私和新鲜度要求强制缓存私人内容
连续 MISS固定 URL、客户端与缓存键条件后复测同时改多个规则

验证修复

重复完全相同的只读请求,比较修复前后的完整响应头。只有目标公共资源稳定出现预期状态,并且没有越过隐私或鉴权边界,修复才算完成。

防止复发

  • 为关键资源保留一条可重复的 header 检查。
  • Cache Rule 变更一次只改一个条件,并记录变更前后证据。
  • 私有响应、鉴权响应和健康检查默认不要为追求 HIT 而强行缓存。

准备修改规则时先看不破坏登录与 API 的 Cache Rules 配方,再返回请求链路架构

官方来源

这篇内容帮你完成目标了吗?

内测反馈只在当前浏览器生成,不会自动上传。

本页目录