排除缓存假象的核心方法,是让同一URL在“带缓存标识”和“绕过缓存”两种条件下各请求一次,再对比响应状态码、响应头和正文首段。如果两次结果不同,你看到的404、200或跳转就可能来自CDN、反向代理、浏览器或服务 worker 缓存,而不是源站真实配置。
404页面优化中遇到的“假象”通常来自三层:浏览器缓存、CDN或反向代理缓存、应用层缓存。三者的排查入口不同,不能只清一次浏览器就下结论。
判断顺序建议从外到内:先换网络和设备,再用命令行绕过本地缓存,最后查CDN和服务端日志。每一步只改变一个条件,才能把现象和原因对应起来。
面对疑似缓存造成的404假象,常见两种做法,代价和适用条件差别很大。
方案一:直接刷新缓存。操作快,适合你已经确认源站配置正确、只是边缘节点未更新的情况。代价是刷新期间可能把真实错误一起掩盖,之后问题复现时缺少对比证据。若站点流量大,全量刷新还可能带来回源压力。
方案二:先取证再刷新。先记录带缓存与绕过缓存两组响应,再决定是否刷新。耗时多一些,但能区分“缓存旧状态”和“源站真404”。适合404页面优化已经影响到收录或转化、需要向团队说明原因的场景。
选择依据可以简化为三条:源站是否已确认返回正确状态码;问题是否只出现在部分地区或部分设备;刷新后是否可能再次出现。三条都指向缓存,才值得直接刷新;否则先取证。
?cachebust=20240101,观察状态码是否变化。查询参数能绕过部分缓存键,但不是所有CDN都按完整查询串区分缓存。Age、X-Cache、Cache-Control。若 Age 较大且与源站修改时间不符,缓存嫌疑上升。假设示例:某URL在浏览器返回404,加随机参数后返回200。这说明边缘缓存里存了一个旧的404响应,源站当前是正常的。此时刷新该URL缓存即可,但要同时检查为什么404会被缓存——常见原因是源站曾对不存在页面返回带较长 Cache-Control 的404,或CDN配置把404也纳入了缓存。
排除缓存假象后,还要确认404本身的设计是否合理。以下几点与缓存判断直接相关:
如果排查后确认是软404,应让服务端对不存在的内容返回真正的404状态码,再单独设置404页面的缓存策略,通常不建议长期强缓存。
出现以下情况时,缓存造成假象的可能性较低:更换网络、设备、隐私窗口后结果一致;加随机参数后状态码不变;源站与边缘节点响应一致;服务端日志显示请求已到达应用且应用主动返回404。此时应转向路由规则、重写规则、文件是否真实存在、数据库记录是否被删除等方向排查。
下一步,选取一个受影响的URL,按上面四步记录两组响应结果。如果两组不一致,先修缓存键和404缓存策略;如果一致,直接检查源站路由与内容是否存在。