检查访问状态与错误页,核心是分别确认三件事:服务器有没有返回响应、返回的状态码是什么、浏览器实际渲染出的是正常页面还是错误页。对已经上线的页面,最直接的做法是用浏览器开发者工具的 Network 面板看首个文档请求的状态码,再用命令行工具复测一次,排除缓存和前端跳转的干扰。下面从一个假设例子展开,说明步骤和常见错误。
假设你有一个已经上线的项目,访问某个栏目页时浏览器显示“404 Not Found”,但服务器访问日志里找不到这条请求记录。这个现象至少有三种解释:请求被 CDN 或反向代理拦截并直接返回了错误页;请求被前端路由接管,实际没有发到后端;浏览器使用了本地缓存或 Service Worker 缓存的旧响应。不能直接断定是后端路由配置错误。
排查顺序可以这样安排:
server、via、x-cache 等字段。curl -I https://example.com/path,只取响应头。加 -H "Cache-Control: no-cache" 可以绕过部分中间缓存。对比 curl 结果与浏览器结果是否一致。状态码描述的是服务器对请求的处理结果,错误页只是这个结果在浏览器里的呈现。两者可能不一致,这是排查中最容易混淆的地方。
判断结果时,以响应头里的状态码为准,不以页面上的文字为准。如果状态码是 200 而页面内容是错误提示,应回到应用层检查是否人为设置了错误的状态码。
按顺序执行,每步记录结果,便于对比:
curl -I 复测,对比状态码是否一致。<title> 和主要正文,确认返回的是目标内容而不是通用错误模板。适用条件:这套方法适用于已有页面或项目,需要定位访问异常。如果项目尚未上线,应先确认解析和端口连通性,再按同样顺序检查状态码。
把“浏览器显示错误页”直接等同于“服务器返回了错误码”,是最常见的误判。前端路由、Service Worker、CDN 自定义错误页都可能让实际状态码与视觉结果不一致。另一个常见错误是只看页面文案就修改后端路由,忽略了代理层已经拦截请求。
需要区分“可能原因”和“已经定位的原因”。例如 502 可能是上游进程崩溃、端口未监听、防火墙拦截或超时,只有在查看网关错误日志和上游服务状态之后,才能确定是哪一项。不要在没有日志证据时断言唯一原因。
下一步:选一个当前访问异常的 URL,按上面的清单从浏览器 Network 面板开始记录状态码和响应头,再与 curl 结果对比,把差异点作为继续排查的入口。