确认网站缓存配置是否生效,不能只看后台开关是否打开,而要从响应头、缓存命中和内容更新三个层面分别验证。最直接的方法是:用浏览器开发者工具或命令行查看响应头中的缓存相关字段,再用同一 URL 连续请求两次,对比两次结果是否一致。如果第二次请求仍返回与第一次相同的缓存标识,说明缓存可能已生效;如果每次都返回不同的内容或标识,则配置很可能没有真正起作用。
网站缓存至少分为浏览器缓存、CDN 缓存、反向代理缓存和应用层缓存。不同层的验证方式不同,混在一起判断容易得出错误结论。
Cache-Control、Expires、ETag、Last-Modified。X-Cache、Age、Via 等字段,具体名称取决于服务商。如果只改了 CDN 规则,却用浏览器强刷来验证,可能看到的是浏览器本地缓存的结果,而不是 CDN 的真实状态。因此验证前要先确定目标层。
假设你为静态资源 /static/app.js 配置了 CDN 缓存,期望缓存 7 天。修改规则后,按以下步骤检查:
curl -I https://example.com/static/app.js,记录响应头中的 Cache-Control、Age 和缓存命中字段。Age 是否增加。如果 Age 从 0 变为 10 以上,说明请求命中了缓存。Age: 0 或没有缓存命中字段,说明请求可能每次都回源,配置未生效。这里的关键判断依据是:缓存生效时,同一资源的重复请求应命中缓存并返回递增的 Age 或明确的命中标识;未生效时,每次请求都表现为回源。
验证缓存是否生效时,常见两种做法:直接刷新浏览器和用命令行请求。两者适用条件不同。
判断结果是:如果你要确认的是浏览器缓存策略,可以结合开发者工具的 Network 面板查看;如果你要确认的是 CDN 或反向代理缓存,命令行请求更可靠。条件允许时,应从不同网络环境或不同地区分别请求,避免只测到一个节点就下结论。
配置看起来生效但实际没有生效,通常来自以下几类错误:
Cache-Control: no-cache,CDN 规则即使配置了缓存也会被覆盖。/app.js?v=2 和 /app.js 可能被当作不同资源,缓存状态不一致。Vary 头:如果响应随 Accept-Encoding 或 User-Agent 变化,缓存命中判断会更复杂。可执行的检查清单:确认目标缓存层;查看响应头中的缓存字段;连续请求两次对比 Age 或命中标识;修改源内容验证更新周期;从不同节点或网络复测。任何一项不符合预期,都应先排查上游响应头和规则优先级,而不是直接认定缓存已生效。
选一个具体 URL,用命令行请求两次并保存响应头,对比 Cache-Control、Age 和缓存命中字段。如果两次结果无法证明命中缓存,先检查源站响应头是否覆盖了缓存规则,再检查 CDN 或代理的规则优先级。只有响应头、命中标识和内容更新三者一致,才能确认配置实际生效。