排查404页面设计问题时,缓存造成的假象通常表现为:你刚改完404页面的样式或状态码,浏览器、CDN或反向代理仍然返回旧版本,让你误以为修改没有生效。排除这种假象的核心方法是绕过缓存直接看源站响应,再逐层对比缓存层与源站的差异。下面按决策顺序说明两种处理方案的条件与代价。
404页面涉及至少三层缓存,排查时要一层层剥离:
判断方法:用浏览器的无痕窗口或强制刷新(多数浏览器为 Ctrl+Shift+R 或 Cmd+Shift+R)访问一个确定不存在的地址,观察返回的页面内容和HTTP状态码。如果无痕窗口结果与普通窗口不同,问题大概率在浏览器缓存;如果两者相同但与你刚部署的版本不同,继续查CDN和应用层。
适用条件:你能拿到源站IP或临时绕过CDN的访问方式,且修改已经部署到源站。
执行步骤:
curl -I -H "Host: 你的域名" http://源站IP/一个不存在的地址 查看响应头。HTTP/1.1 404 Not Found 状态码是否正确,以及响应体是不是你最新设计的404页面。代价与限制:需要知道源站地址,部分托管环境不暴露源站IP;HTTPS站点直接请求源站IP时可能遇到证书不匹配,需要加 -k 跳过校验,但这只用于排查,不代表可以忽略证书问题。
适用条件:源站内容已确认正确,但CDN或代理仍返回旧404页面。
执行步骤:
X-Cache、CF-Cache-Status 等,具体字段因服务商而异)。Cache-Control 或 Expires,导致边缘节点长期不回源。代价与限制:刷新有次数或频率限制;如果源站对404响应设置了长缓存头,刷新后很快又会被缓存旧版本,需要同时调整源站的缓存策略。
决策依据是“源站是否正确”和“缓存层是否可控”:
排查时容易把以下情况误当成缓存问题:
核对缓存头是区分真假象的关键:查看响应中的 Cache-Control、Age、ETag 等字段。如果 Age 大于0,说明响应来自缓存;如果 Age 为0或缺失,缓存嫌疑下降,应转向检查路由和状态码逻辑。
下一步:选一个确定不存在的URL,先用无痕窗口记录当前返回的状态码和页面内容,再用命令行直接请求源站对比。两者一致说明缓存不是原因,两者不同则按上面的方案二处理缓存层。