去年帮一个做外贸的朋友修网站,他在群里发来一张截图:页面白屏,底下一行英文「500 Internal Server Error」。他自己百度了一圈,把 DNS、防火墙、备案挨个怀疑了一遍,甚至准备给机房打电话。我远程一看,其实是服务器上 PHP 升级后有个函数被废弃,报错堆栈里写得明明白白。他缺的不是技术,是不知道「500」这三个数字本身就是服务器递出来的小纸条——纸条上已经写好了问题出在哪一层。
状态码是服务器写给请求方的回执
HTTP 状态码是服务器对每次请求的回答,由三位数字组成:第一位数字代表类别,后两位是细分。200 是 2 开头(成功类),404 是 4 开头(客户端错误类)。看懂第一位数字,排错的大方向就定了。
五个区段,先分清是谁的问题
状态码按第一位分成五类,对应的排错思路完全不同:
- 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 | 服务暂不可用 | 服务器过载或维护中 |
看到状态码,按这个顺序排错
- 先看是 4 还是 5:4 开头,检查自己的 URL、参数、请求头和登录态;5 开头,检查服务器日志、进程是否存活、依赖服务是否正常;
- 查清楚含义再动手:打开本站的HTTP状态码速查,输入看到的数字,确认它到底在说什么,别凭感觉猜;
- 看响应体和日志:很多框架会在响应里附带错误详情,浏览器按 F12 打开开发者工具,在 Network 面板里点开那条请求,答案往往直接写在里面;
- 5xx 优先查最近改动:上线前好好的,上线后 500,先怀疑刚部署的代码和配置——排错的第一步永远是「最近变过什么」。
容易搞混的三对
- 401 和 403:401 是「你没登录」,403 是「登录了但没权限」,前者补登录,后者找管理员;
- 404 和 410:404 是「这里没有」,410 是「曾经有,现在没了」;
- 502 和 504:502 是「上游说错话了」,504 是「上游半天不回话」,一个是答非所问,一个是等不到回应。
状态码不是给搜索引擎看的玄学,是服务器写给请求方的回执。背下来没必要,但「4 开头查自己、5 开头查后端」这条原则值得记一辈子——它能把大多数「网站打不开」,从玄学变成科学。下次再看到 404,先别慌,检查一下地址是不是拼错了。