首页/网络/协议速查/X-Cache 系列缓存诊断头
HTTP 头与缓存70 条

X-Cache 系列缓存诊断头

CDN/代理私有诊断头(X-Cache、X-Cache-Hits、CF-Cache-Status、X-Served-By 等):排「是否命中缓存」的第一线索。

协议速查网络更新于 2026-10-13

这组头是干什么的

X-Cache、X-Cache-Hits、CF-Cache-Status、X-Served-By 这类是 CDN 与代理的私有诊断头,没有统一标准,各家取值含义要查对应文档。它们回答的是排序缓存问题时最先要弄清的一件事:这次请求命中了边缘缓存,还是回源了。

怎么用才有意义

单看一次响应说明不了什么:命中率要在同一个地址上多次请求再看分布。如果命中与未命中交替出现,通常意味着缓存键里混进了不该混的东西(例如把全部查询串或 Cookie 算进键),或者缓存生存时间设得太短。

基本信息

常见取值HIT、MISS、EXPIRED、REVALIDATED、BYPASS、DYNAMIC
规范状态无标准,由各家自行定义
关联头部Age、Via、Server 一起看,能区分边缘命中与回源
判断方法同一地址多次请求,统计取值分布

典型使用场景

  • 调整缓存策略后验证命中率变化
  • 排查「内容更新了但用户仍看到旧版本」
  • 判断某类请求为什么从来不命中
  • 定位回源压力的主要来源

批量判断命中率

批量判断命中率
for i in $(seq 1 20); do
  curl -sI https://www.example.com/ | awk -F': ' 'tolower($1)=="x-cache"{print $2}'
done | sort | uniq -c
# 同时观察 Age 与缓存控制字段,判断是边缘命中还是每次都回源

取值怎么读

取值含义下一步
HIT由边缘缓存直接返回结合 Age 判断这份副本有多旧
MISS本次未命中,回源取新看是否有不该进入缓存键的因素
EXPIRED副本过期后重新校验或取新属于正常的刷新行为
BYPASS按规则跳过缓存检查是否因 Cookie 或请求头被排除
DYNAMIC该类型内容不参与缓存确认是否符合预期
调完缓存策略(生存时间、缓存键是否包含查询串)后,用命中率的变化验证效果,比逐条翻响应更可靠。
把 HIT 理解成「用户拿到的就是最新内容」是错的:命中的也可能是过期后尚未重新验证的旧副本,必须结合 Age 一起判断。

易错点

  • 把 HIT 当成内容一定最新:命中也可能返回未重新验证的旧副本,要结合 Age
  • 用一次请求的结果判断命中率:单次响应没有统计意义
  • 各家同名字段含义不同却按同一套经验解读:结论完全跑偏
  • 缓存键包含全部查询串或 Cookie:命中率长期偏低,回源压力居高不下
  • 带 Cookie 的请求被规则排除缓存而无人知晓:表现为「登录用户从不命中」

数据来源与参考

  • Fastly/Cloudflare 文档(各自诊断头定义)
  • RFC 9111(Age/缓存语义)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌