HTTP状态码表

状态码 名称 分类 说明 处理建议

分类速览

点击任意卡片即可把上方表格切换到该分类,再次点击「全部」可恢复完整列表。

收录 81 个 HTTP 状态码,含标准码与 Nginx、Cloudflare、IIS 私有扩展码,每条附带含义说明与具体处理建议。

HTTP 状态码的分类

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 的 5xx 码怎么读

使用 Cloudflare 的站点会看到 520—530 这一系列私有状态码,它们的价值在于精确定位回源失败的环节:

  • 521 / 522 / 523:连不上源站。521 是服务没起来,522 是连接超时,523 是 DNS 指向了不可达的地址。
  • 524:连上了但源站响应太慢,超过了 Cloudflare 约 100 秒的等待上限。这类问题只能靠优化后端解决。
  • 525 / 526:TLS 握手失败或源站证书无效。检查 SSL/TLS 加密模式与源站证书即可。

看到这些码时,说明问题一定出在源站侧,Cloudflare 本身只是如实转达。


使用方式

  • 查表:搜索状态码、英文名或关键词,如 404、Gateway、跨域、超时;
  • 看建议:每条都附有「处理建议」,直接说明该往哪个方向排查;
  • 筛选:点击分类标签或下方「分类速览」卡片,可只看某一类状态码;
  • 复制:点击状态码徽章即可复制数字。

本表内容用于技术排障参考。若涉及接口设计规范,建议以 RFC 9110 及所在团队的接口约定为准。

常见问题 FAQ

表里的处理建议是官方规范吗?

不是。说明与建议基于 RFC 9110 及常见运维实践整理,用于排障参考。接口设计请以团队约定与官方规范为准。

接口返回 200 但数据是空的,怎么排查?

先确认是否发生了重定向导致请求打到了别的地址,再检查响应体结构、分页参数与后端的过滤条件,状态码正常不代表业务逻辑正确。

304 状态码是错误吗?

不是。304 表示协商缓存命中,资源未发生变化,服务器不返回响应体,客户端直接使用本地缓存,是节省带宽的正常行为。

431 请求头过大是什么原因?

通常是 Cookie 过多或 JWT 过长。可清理冗余 Cookie、缩短 Token,或调大 Nginx 的 large_client_header_buffers。

413 请求体过大怎么办?

调大 Nginx 的 client_max_body_size 与 PHP 的 upload_max_filesize,或者改用分片上传方案。

429 状态码该怎么处理?

表示被限流。应按响应头 Retry-After 指定的时间退避重试,并加入指数退避与随机抖动,避免加剧服务端压力。

Cloudflare 的 520 到 530 是什么意思?

这些是 Cloudflare 回源失败时返回的私有码:521 源站宕机、522 连接超时、523 DNS 不可达、524 源站响应超时、525/526 证书问题、530 DNS 解析失败。

499 是什么状态码?

这是 Nginx 的私有状态码,表示客户端在服务端返回响应前主动断开了连接。大量出现说明后端响应过慢,客户端先超时了。

502 和 504 有什么区别?

502 是代理收到上游的无效响应,通常后端进程崩溃或未启动;504 是代理等待上游响应超时,后端还活着但太慢。

301 和 302 有什么区别?

301 是永久重定向,浏览器会长期缓存;302 是临时重定向。此外很多实现会把 302 的 POST 改成 GET 再跳转,需要保持方法不变时应使用 307 或 308。

401 和 403 有什么区别?

401 表示未认证(没告诉服务器你是谁),403 表示已认证但无权限(知道你是谁但不能这么做)。带上正确凭据仍返回 401,通常是 Token 过期或签名错误。

HTTP 状态码的三位数字分别代表什么?

第一位表示类别:1xx 信息、2xx 成功、3xx 重定向、4xx 客户端错误、5xx 服务端错误。后两位是具体编号。