HTTP 状态码大全
1xx 到 5xx 的全部常用状态码,附带中文含义、典型场景和排查方向。共 40 余条,支持按编号或关键字筛选。
1xx · 信息响应
表示请求已收到,服务器要求继续处理。这类状态码一般是中间态,普通用户很少直接看到。
| 状态码 | 名称 | 含义与典型场景 |
|---|---|---|
| 100 | Continue | 服务器已收到请求头,客户端可以继续发送请求体。常见于较大的 POST 请求。 |
| 101 | Switching Protocols | 服务器同意切换协议,例如从 HTTP 升级到 WebSocket。 |
| 102 | Processing | 服务器正在处理,但还没有结果。WebDAV 使用。 |
| 103 | Early Hints | 提前返回部分响应头,让浏览器预加载资源,属于性能优化手段。 |
2xx · 成功
请求被成功接收、理解并处理。
| 状态码 | 名称 | 含义与典型场景 |
|---|---|---|
| 200 | OK | 请求成功,响应体里是正常内容。最常见的状态码。 |
| 201 | Created | 资源创建成功。RESTful 接口里 POST 新建数据后返回这个。 |
| 202 | Accepted | 请求已接受但尚未处理完,适合异步任务提交。 |
| 203 | Non-Authoritative Information | 返回的元信息不是来自源服务器,而是经过改造的副本。 |
| 204 | No Content | 处理成功但没有响应体。DELETE、PUT 常用。 |
| 205 | Reset Content | 要求客户端重置表单输入。 |
| 206 | Partial Content | 返回部分内容。视频拖动进度条、大文件断点续传都靠它。 |
| 207 | Multi-Status | 响应体里包含多个独立状态,WebDAV 使用。 |
| 208 | Already Reported | 同一集合中的成员已被报告过,避免重复。 |
| 226 | IM Used | 服务器返回的实体是经过实例操纵的结果。 |
3xx · 重定向
需要客户端采取进一步动作才能完成请求。3xx 是 SEO 里最需要小心的一类。
| 状态码 | 名称 | 含义与典型场景 |
|---|---|---|
| 300 | Multiple Choices | 有多个可选资源,需要客户端选择。 |
| 301 | Moved Permanently | 资源永久迁移。会传递权重,域名更换、HTTP 跳 HTTPS、绑定主域名都应该用它。 |
| 302 | Found | 临时跳转。用于登录后跳回、AB 测试等临时场景,长期使用会让搜索引擎保留原地址。 |
| 303 | See Other | 用 GET 去访问另一个地址,常见于 POST 之后的重定向。 |
| 304 | Not Modified | 资源没变,用缓存即可。配合 If-Modified-Since、ETag 使用,能省掉重复下载。 |
| 305 | Use Proxy | 必须通过指定代理访问。已废弃。 |
| 307 | Temporary Redirect | 临时跳转,但要求保持原请求方法不变(POST 还是 POST)。302 的严谨版。 |
| 308 | Permanent Redirect | 永久跳转,同样保持请求方法不变。 |
4xx · 客户端错误
问题出在请求本身——地址写错、权限不足、参数不合法。
| 状态码 | 名称 | 含义与典型场景 |
|---|---|---|
| 400 | Bad Request | 请求语法有误,服务器看不懂。常见于参数缺失、JSON 格式错误。 |
| 401 | Unauthorized | 未认证。没登录、token 失效或没带 Authorization 头。 |
| 402 | Payment Required | 需要付费。主流浏览器基本不用,多见于预留定义。 |
| 403 | Forbidden | 已认证但没权限。和 401 的区别:401 是“你是谁”,403 是“我知道你是谁,但你不能进”。 |
| 404 | Not Found | 资源不存在。URL 拼错、内容被删除、伪静态规则写错都会出现。 |
| 405 | Method Not Allowed | 接口不支持该请求方法,例如用 GET 调一个只接受 POST 的接口。 |
| 406 | Not Acceptable | 服务器无法提供客户端 Accept 头要求的格式。 |
| 407 | Proxy Authentication Required | 需要先通过代理的身份验证。 |
| 408 | Request Timeout | 请求超时,客户端在服务器等待时间内没有发完请求。 |
| 409 | Conflict | 请求与当前资源状态冲突,例如同时修改同一条记录。 |
| 410 | Gone | 资源曾经存在,现在被永久删除。比 404 更明确,利于搜索引擎尽快移除索引。 |
| 411 | Length Required | 缺少 Content-Length 头。 |
| 412 | Precondition Failed | 请求头里的前置条件不成立,例如 If-Match 不匹配。 |
| 413 | Payload Too Large | 请求体过大,超过服务器限制。上传大文件时常见。 |
| 414 | URI Too Long | URL 太长。 |
| 415 | Unsupported Media Type | 请求体的格式服务器不支持,例如接口要 JSON 却发了表单。 |
| 416 | Range Not Satisfiable | 请求的字节范围超出文件大小。 |
| 417 | Expectation Failed | Expect 头里的期望无法满足。 |
| 418 | I'm a teapot | “我是个茶壶”。RFC 2324 愚人节彩蛋,部分框架拿它做特殊标记。 |
| 421 | Misdirected Request | 请求被发到了无法响应的服务器,常见于 HTTP/2 连接复用。 |
| 422 | Unprocessable Entity | 格式正确但语义有误,例如必填字段为空。表单校验常返回这个。 |
| 423 | Locked | 资源被锁定。WebDAV 使用。 |
| 424 | Failed Dependency | 由于前一个请求失败,本次请求也失败。 |
| 425 | Too Early | 服务器不愿意处理可能被重放的请求,防重放攻击。 |
| 426 | Upgrade Required | 要求客户端升级协议,例如必须用 TLS。 |
| 428 | Precondition Required | 要求请求带上条件头,避免并发覆盖。 |
| 429 | Too Many Requests | 请求过于频繁,被限流。响应头里通常会带 Retry-After。 |
| 431 | Request Header Fields Too Large | 请求头过大,常见于 Cookie 塞太多。 |
| 451 | Unavailable For Legal Reasons | 因法律原因不可用。 |
5xx · 服务端错误
请求本身没问题,是服务器自己出了状况。
| 状态码 | 名称 | 含义与典型场景 |
|---|---|---|
| 500 | Internal Server Error | 服务器内部错误。看 PHP 错误日志,通常是代码异常、数据库连不上、权限不足。 |
| 501 | Not Implemented | 服务器不支持该请求方法。 |
| 502 | Bad Gateway | 网关或代理从上游收到无效响应。Nginx 连不上 PHP-FPM 时就是它,检查 socket 路径和 FPM 是否在跑。 |
| 503 | Service Unavailable | 服务暂时不可用,通常是过载或维护。带 Retry-After 更友好。 |
| 504 | Gateway Timeout | 上游超时。和 502 的区别:502 是连上了但响应无效,504 是根本没等到响应。慢查询、导出大任务最容易触发。 |
| 505 | HTTP Version Not Supported | 服务器不支持请求用的 HTTP 版本。 |
| 506 | Variant Also Negotiates | 内容协商配置有误。 |
| 507 | Insufficient Storage | 存储空间不足。WebDAV 使用。 |
| 508 | Loop Detected | 检测到死循环,常见于重定向规则写错。 |
| 510 | Not Extended | 需要进一步扩展请求。 |
| 511 | Network Authentication Required | 需要先做网络认证,例如公共 WiFi 的登录门户。 |
排查思路:几个高频状态码怎么下手
502 与 504 的区别
这两个都在网关层,常常被混为一谈,但方向完全不同:
- 502 Bad Gateway:网关联系上了上游,但上游返回的东西它读不懂,或者上游根本没在监听。Nginx 场景下九成是
fastcgi_pass指向的 socket 不对、PHP-FPM 没启动,或者上游端口写错。 - 504 Gateway Timeout:网关等不到上游的响应。上游还活着,只是太慢——慢查询、同步调用外部接口、生成大文件都会触发。
快速判断:看 PHP-FPM 进程在不在。不在就是 502,在但日志里跑不动就是 504。
301 与 302 对 SEO 的影响
301 是永久跳转,搜索引擎会把原地址的权重转移到新地址,并逐渐用新地址替换索引;302 是临时跳转,搜索引擎会保留原地址。所以:
- HTTP 跳 HTTPS、换域名、统一到主域名 → 必须用 301。
- 登录后跳回、活动页临时改版 → 用 302 或 307。
- 把 302 当 301 长期用,会导致两个地址都被收录,形成重复内容。
404 与 410 怎么选
404 表示“现在找不到”,410 表示“曾经有,永久删了”。410 能让搜索引擎更快移除索引,但一旦误用(内容只是暂时下线)会造成不可逆的权重损失。不确定就用 404。
403 与 401 怎么选
401 表示没通过身份认证,应该返回 WWW-Authenticate 头提示怎么认证;403 表示身份没问题但权限不够。接口设计里混用这两个,会让调试变得很痛苦。
如何自己查看状态码
浏览器按 F12 打开开发者工具,切到 Network 面板,刷新页面,看 Status 那一列。想看单个 URL 的响应头,可以用命令行:
curl -I https://mcstudio.top/ curl -I -L https://mcstudio.top/
第一条只看第一跳,第二条会跟随重定向(-L),适合排查跳转链。