橙宝书
CDN 与网站加速

06 · 读懂 Cloudflare 默认缓存行为

从请求资格、文件扩展名、响应头、默认 TTL 和 CF-Cache-Status 判断一个资源为什么命中或绕过缓存。

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

CDN · PHASE 2入门约 24 分钟Cache-Control · TTL · CF-Cache-Status

完成结果

你能在不创建 Cache Rule 的前提下,先判断请求是否具备缓存资格、响应是否允许共享缓存、对象是否已存在于当前数据中心,并用响应头解释 DYNAMICBYPASSMISSHIT

缓存判断不是一个开关

flowchart TD
  A[请求到达 Cloudflare] --> B{主机名是否 Proxied}
  B ----> X[不经过 Cloudflare 缓存]
  B ----> C{请求是否符合缓存资格}
  C ----> D[DYNAMIC 或不进入缓存路径]
  C ----> E{扩展名规则与响应头是否允许}
  E ----> F[BYPASS 或 DYNAMIC]
  E ----> G{当前数据中心已有新鲜对象}
  G ----> H[MISS 后请求源站]
  G ----> I[HIT 返回缓存对象]

默认行为按 URL 的文件扩展名判断常见静态内容,而不是根据响应的 MIME 类型猜测。HTML 与 JSON 默认不缓存;若业务需要缓存它们,必须先处理身份、Cookie 和私有响应,再用窄范围 Cache Rules 明确开启。

默认会遇到的对象

类型默认倾向示例说明
常见静态扩展名可缓存.css.js.png.webp.woff2仍受方法、状态码和响应头影响
HTML不缓存//pricingURL 无静态扩展名时通常为 DYNAMIC
JSON不缓存/api/products.json即使内容公开,也需显式评估规则与隐私
Set-Cookie 的响应通常不存储登录、实验分组、会话初始化先确认 Cookie 是否真的需要
privateno-store 等响应不进入共享缓存账号页、敏感 API不应为了命中率删除隐私语义

资格分两次判断

DYNAMIC 通常表示请求到达时就不符合缓存条件,例如默认不缓存的 HTML、绕过规则或 Development Mode。BYPASS 通常表示请求原本可以进入缓存路径,但源站响应头、Cookie 或配置让 Cloudflare 不存储。具体原因仍要结合规则和完整响应头判断。

没有显式缓存头时的默认 Edge TTL

响应状态默认 Edge TTL
200、206、301120 分钟
302、30320 分钟
404、4103 分钟
其他状态默认不缓存

这张表只描述“资源本来具备缓存资格,但源站没有提供明确缓存头”的默认值。源站的 Cache-ControlExpires、Cache Rules 和套餐能力都可能改变最终结果。

用同一 URL 做可重复验证

使用生产页面实际引用的指纹资源,例如 /assets/app.a1b2c3.js。不要用首页作为第一次缓存测试,也不要附带登录 Cookie。

连续请求并保留完整响应头

curl -sS -D first.headers -o /dev/null \
  https://www.example.com/assets/app.a1b2c3.js
curl -sS -D second.headers -o /dev/null \
  https://www.example.com/assets/app.a1b2c3.js

对比 CF-Cache-StatusAgeCache-ControlExpiresSet-CookieVary、状态码和 CF-Ray。相同 URL 在不同 Cloudflare 数据中心首次访问仍可能是 MISS,因此保留 Ray ID 的机房后缀。

用响应头解释状态

常见序列是首次 MISS、随后同一缓存位置 HIT,且 Age 增长。DYNAMIC 时先确认扩展名与 Cache Rules;BYPASS 时优先看响应的 Set-Cookie 和缓存控制头;不要一看到未命中就清缓存。

再测试动态页面

curl -sS -D - -o /dev/null https://www.example.com/account

账号页保持 DYNAMICBYPASS 往往是正确结果。缓存优化的目标是正确性、源站负载和延迟的平衡,不是让每个 URL 都变成 HIT

常见状态速查

状态读法下一步
HIT当前缓存位置已有可用对象检查 Age、内容版本和缓存键
MISS请求可缓存,但当前没有对象再请求一次并检查是否被存储
DYNAMIC请求阶段未进入正常缓存资格查扩展名、方法、规则和 Development Mode
BYPASS响应或配置要求绕过存储Cache-ControlExpiresSet-Cookie
EXPIRED找到对象但已过期查 TTL 与重新验证结果
REVALIDATED过期对象经源站确认仍有效查 ETag 或 Last-Modified
UPDATING正在异步更新,暂时提供旧对象查 stale-while-revalidate 策略

需要更细的状态诊断时,进入 CF-Cache-Status 排障手册。下一阶段将用 Cache Rules为真实应用建立安全规则。

官方来源

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

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

本页目录