要取得可复查的网站缓存状态证据,核心是让每一次判断都能被第三方按同样步骤复现:记录请求与响应头、保存响应正文摘要、注明检测时间与出口网络,并区分浏览器缓存、CDN缓存和服务器端缓存。只截一张“命中缓存”的图不算证据,因为它缺少请求条件、时间戳和对比基线。
“网站缓存”在实际项目里至少涉及三层,证据形式不同:
Cache-Control、ETag、Last-Modified 等响应头控制,证据是同一 URL 在不同请求下的状态码和头部变化。Age、X-Cache、CF-Cache-Status 一类响应头,但不同服务商字段名不同,必须按实际响应记录,不能预设字段一定存在。如果目标只是确认“用户是否拿到旧页面”,浏览器层证据通常足够;如果要确认“回源是否被减少”,则需要 CDN 层或服务端日志。两者的取证成本差别很大,先定目标再选手段。
一份能被复查的缓存状态记录,建议包含以下字段。缺项越多,复查时越容易得出不同结论。
GET 或 HEAD,以及是否携带 Cookie、Authorization、Accept-Encoding。这些头可能直接改变缓存行为。200、304、Age、Cache-Control、ETag、Vary。命令行取证可以用 curl,把响应头和正文分开保存:
curl -sS -D headers.txt -o body.bin "https://example.com/page"
随后对 body.bin 计算哈希,并把 headers.txt 与哈希值一起归档。这样复查者可以重放同一请求,对比头部和正文是否变化。示例中的域名仅作占位,实际使用时替换为待测 URL。
单次请求只能说明“此刻返回了什么”,不能证明缓存策略是否按预期工作。更可靠的做法是做一组有对照的请求:
Age 和正文哈希。若第二次 Age 增大而正文哈希不变,说明中间层很可能复用了缓存。Cache-Control: no-cache 的请求,观察状态码是否变为 304 或回源返回 200。这能帮助区分“缓存命中”和“源站每次都返回相同内容”。适用条件是:你能控制或至少能观察到请求头,并且目标 URL 允许被重复请求。如果页面依赖登录态或个性化内容,缓存行为会因 Cookie 不同而变化,此时应先固定测试身份,或改用不携带登录态的公开 URL 做基线。
即使记录完整,也要注意几类边界。第一,Age 存在不等于内容一定正确,它只说明响应经过了一段缓存时间。第二,304 表示协商缓存生效,但不代表 CDN 边缘节点命中了缓存。第三,正文哈希一致可能只是源站内容未变,不能单独证明缓存层起了作用,需要结合 Age 或回源日志交叉判断。
如果复查者按你的记录重放后得到不同结果,优先检查三项:请求头是否一致、出口网络是否相同、测试时间是否落在缓存过期边界附近。把这三项写进记录,比事后解释更有用。
下一步,选一个你正在维护的页面,按上面的字段做一次双请求对比,把头部、正文哈希和时间归档。若结果无法复现,先补齐请求条件和出口信息,再判断缓存策略是否需要调整。