去年帮一个做外贸的朋友修网站,他在群里发来一张截图:页面白屏,底下一行英文「500 Internal Server Error」。他自己百度了一圈,把 DNS、防火墙、备案挨个怀疑了一遍,甚至准备给机房打电话。我远程一看,其实是服务器上 PHP 升级后有个函数被废弃,报错堆栈里写得明明白白。他缺的不是技术,是不知道「500」这三个数字本身就是服务器递出来的小纸条——纸条上已经写好了问题出在哪一层。

状态码是服务器写给请求方的回执

HTTP 状态码是服务器对每次请求的回答,由三位数字组成:第一位数字代表类别,后两位是细分。200 是 2 开头(成功类),404 是 4 开头(客户端错误类)。看懂第一位数字,排错的大方向就定了。

五个区段,先分清是谁的问题

HTTP 状态码五区段示意图:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务器错误,以及 200、301、302、404、500、502、503 七个最常见状态码
图:状态码第一位就决定了排错方向——4 开头查请求,5 开头查服务器

状态码按第一位分成五类,对应的排错思路完全不同:

  • 1xx 信息:请求还在协商中,用户一般看不到,比如 100 Continue 表示「接着发」;
  • 2xx 成功:请求被正常处理。200 OK 最常见,还有 201 创建成功、204 返回了空内容;
  • 3xx 重定向:资源挪地方了,让你去别处找。301 是永久搬家(浏览器会更新书签),302 是临时跳转,304 是「内容没变,直接用缓存」;
  • 4xx 客户端错误:问题在请求这一侧——地址错、参数错、没权限。404 找不到、401 没登录、403 没权限、429 请求太频繁;
  • 5xx 服务器错误:请求没问题,是服务器自己没搞定。500 内部错误、502 网关出错、503 服务不可用、504 网关超时。

七个最常见的,挨个说人话

状态码人话解释常见场景
200成功,一切正常页面正常打开
301永久搬家域名换新地址,旧地址转过去
302临时跳转未登录先跳到登录页
404找不到地址拼错、页面被删
500服务器内部错误程序代码出 bug
502网关出错nginx 后面的应用挂了
503服务暂不可用服务器过载或维护中

看到状态码,按这个顺序排错

  1. 先看是 4 还是 5:4 开头,检查自己的 URL、参数、请求头和登录态;5 开头,检查服务器日志、进程是否存活、依赖服务是否正常;
  2. 查清楚含义再动手:打开本站的HTTP状态码速查,输入看到的数字,确认它到底在说什么,别凭感觉猜;
  3. 看响应体和日志:很多框架会在响应里附带错误详情,浏览器按 F12 打开开发者工具,在 Network 面板里点开那条请求,答案往往直接写在里面;
  4. 5xx 优先查最近改动:上线前好好的,上线后 500,先怀疑刚部署的代码和配置——排错的第一步永远是「最近变过什么」。

容易搞混的三对

  • 401 和 403:401 是「你没登录」,403 是「登录了但没权限」,前者补登录,后者找管理员;
  • 404 和 410:404 是「这里没有」,410 是「曾经有,现在没了」;
  • 502 和 504:502 是「上游说错话了」,504 是「上游半天不回话」,一个是答非所问,一个是等不到回应。

状态码不是给搜索引擎看的玄学,是服务器写给请求方的回执。背下来没必要,但「4 开头查自己、5 开头查后端」这条原则值得记一辈子——它能把大多数「网站打不开」,从玄学变成科学。下次再看到 404,先别慌,检查一下地址是不是拼错了。