| 状态码 | 名称 | 分类 | 说明 | 处理建议 |
|---|
点击任意卡片即可把上方表格切换到该分类,再次点击「全部」可恢复完整列表。
HTTP 状态码是三位数字,第一位数字表示响应的类别,这是快速判断问题方向的最有效线索:
| 类别 | 含义 | 通俗理解 |
|---|---|---|
| 1xx | 信息响应 | 收到了,还在处理 |
| 2xx | 成功 | 办好了 |
| 3xx | 重定向 | 换个别的地方找 |
| 4xx | 客户端错误 | 你的请求有问题 |
| 5xx | 服务端错误 | 我这边出故障了 |
本表收录 81 个状态码,除了 RFC 标准定义的官方状态码,还包括 Nginx、Cloudflare、IIS 三家的私有扩展码——这些码在标准里并不存在,但在真实运维中经常遇到。
遇到报错时,先看状态码的首位数字,能立刻把排查范围砍掉一半:
看到 4xx,问题在调用方。 检查请求参数、请求头、URL、请求体格式与权限。这是你自己能改的部分,不需要等服务端同学。
看到 5xx,问题在服务端。 需要看服务端日志、依赖服务状态、数据库连接、磁盘空间与超时配置。调用方通常只能重试或等待。
看到 3xx,先确认是否符合预期。 很多「接口返回空数据」的问题,根源是请求被重定向到了一个不再返回数据的地址,而客户端没跟随或跟随到了错误的地方。
401 与 403 的区别。 401 是「你没告诉我你是谁」(未认证),403 是「我知道你是谁,但你不能这么做」(无权限)。带上了正确的 Token 仍然返回 401,通常是 Token 过期或签名不对;带上正确 Token 后返回 403,才是权限问题。
301 与 302 的区别。 301 是永久重定向,浏览器会长期缓存,配错后很难撤销;302 是临时重定向。两者还有一个历史遗留问题:很多实现会把 302 的 POST 请求改成 GET 再跳转,导致参数丢失。需要保持方法不变时,应使用 307 或 308。
502 与 504 的区别。 502 Bad Gateway 是代理收到了上游的无效响应,通常意味着后端进程崩溃或没启动;504 Gateway Timeout 是代理等待上游响应超时,后端还活着但太慢了。一个看「有没有响应」,一个看「响应得够不够快」。
499 不是标准码。 它是 Nginx 的私有码,表示客户端在服务端返回响应前主动断开了连接。大量出现 499 时,往往说明后端接口太慢,客户端先超时了——这时候优化接口比调整 Nginx 配置更有效。
使用 Cloudflare 的站点会看到 520—530 这一系列私有状态码,它们的价值在于精确定位回源失败的环节:
看到这些码时,说明问题一定出在源站侧,Cloudflare 本身只是如实转达。
404、Gateway、跨域、超时;本表内容用于技术排障参考。若涉及接口设计规范,建议以 RFC 9110 及所在团队的接口约定为准。
表里的处理建议是官方规范吗?
接口返回 200 但数据是空的,怎么排查?
304 状态码是错误吗?
431 请求头过大是什么原因?
413 请求体过大怎么办?
429 状态码该怎么处理?
Cloudflare 的 520 到 530 是什么意思?
499 是什么状态码?
502 和 504 有什么区别?
301 和 302 有什么区别?
401 和 403 有什么区别?
HTTP 状态码的三位数字分别代表什么?