遇到404时,先别急着改服务器或重发页面。缓存造成的假象很常见:浏览器、CDN、反向代理或DNS缓存里仍保留着旧响应,你看到的404可能并不是源站现在的状态。排查顺序应该是先确认“这个404来自哪一层”,再决定要不要清理缓存或修正配置。
在浏览器开发者工具打开Network面板,勾选Disable cache后刷新页面,记录状态码和响应头。也可以用命令行请求并强制不使用本地缓存:
curl -I -H "Cache-Control: no-cache" https://example.com/page
如果命令行返回200,而浏览器仍显示404,说明问题在浏览器缓存或本地网络层;如果两者都返回404,则要转向源站路由、文件路径或服务端配置排查。这里的判断依据是同一URL在不同请求路径下的状态码差异,而不是页面外观。
CDN和反向代理可能缓存了旧的404响应。要查的是:缓存命中状态、缓存键规则、TTL设置以及是否有强制刷新入口。
注意,刷新缓存只能解决“缓存内容与源站不一致”的问题。如果源站本身已经返回404,刷新缓存不会让页面恢复。
DNS缓存或本地hosts文件可能把域名解析到旧服务器,旧服务器上已没有该页面,于是返回404。
nslookup example.com或dig example.com查看解析结果;检查系统hosts文件。服务端缓存插件、框架路由缓存、OPcache或对象缓存也可能保留旧路由。判断方法是:临时停用缓存层后请求同一URL,观察状态码是否变化。
这一步的适用条件是你能控制或临时调整缓存配置。生产环境操作前应确认影响范围,避免因停用缓存导致源站压力上升。
在URL后加一个无意义的查询参数,例如?v=20240601,可以绕过部分按完整URL缓存的层。如果带参数返回200、不带参数返回404,通常指向缓存键或缓存规则问题;如果两者都返回404,则更可能是源站路由或文件缺失。
这个方法的局限是:部分缓存层会忽略查询参数,因此不能作为唯一证据,只能与响应头、命令行请求结果一起判断。
完成以上检查后,如果确认是缓存层保留了旧404,下一步应针对该URL执行缓存刷新,并复查缓存规则是否会把404长期缓存;如果源站本身返回404,则应转向文件路径、路由配置或重定向规则的处理。