网络
HTTP 状态码列表
面向开发者的 HTTP 状态码(1xx-5xx)完整列表,包含含义、常见原因和解决方法。内置查询工具——输入代码即可立即查看详情。
HTTP 状态码对照表
| 代码 | 名称 | 含义 | 常见原因 |
|---|---|---|---|
| 1xx — 信息性响应 | |||
| 100 | Continue (Continue) | 表示服务器已收到请求的初始部分,客户端应继续发送其余内容。 | 当客户端在发送较大的请求体之前发送 Expect: 100-continue 请求头时返回。 |
| 101 | Switching Protocols (Switching Protocols) | 表示服务器接受 Upgrade 请求头的要求,正在切换到另一种协议。 | 建立 WebSocket 连接时常见的正常响应。 |
| 102 | Processing (Processing) | 表示服务器已接受请求但仍在处理中,尚无响应可返回(WebDAV)。 | 用于在长时间运行的 WebDAV 操作中避免超时。 |
| 103 | Early Hints (Early Hints) | 在最终响应之前发送 Link 等预备响应头,让浏览器可以预加载资源。 | 由 CDN 或反向代理添加,用于加速 CSS/JS 的预加载。 |
| 2xx — 成功 | |||
| 200 | OK (OK) | 最常见的成功响应,表示请求已被成功处理。 | |
| 201 | Created (Created) | 表示请求导致新资源被创建。 | 由通过 POST 创建资源的 API 返回,通常包含指向新资源的 Location 响应头。 |
| 202 | Accepted (Accepted) | 表示请求已被接受,但处理尚未完成(异步处理)。 | 用于仅将任务加入队列的异步 API,或批处理接收端点。 |
| 204 | No Content (No Content) | 表示请求成功,但没有内容可返回。 | 常见于 DELETE 成功后,或 API 设计中省略响应体的 PUT 更新。 |
| 206 | Partial Content (Partial Content) | 表示根据客户端的 Range 请求头,只返回了资源的一部分。 | 视频拖动播放或断点续传下载时的正常响应。 |
| 3xx — 重定向 | |||
| 301 | Moved Permanently (Moved Permanently) | 表示资源已永久移动到新的 URL;搜索引擎会将排名信号转移到新 URL。 | 用于 URL 结构变更或域名迁移后重定向旧 URL。 |
| 302 | Found (Found) | 表示资源暂时位于另一个 URL。永久性移动应改用 301。 | 常用于维护期间的临时路由,或登录后的重定向。 |
| 303 | See Other (See Other) | 表示应使用 GET 方法从另一个 URL 获取结果(Post-Redirect-Get 模式)。 | 用于表单提交(POST)之后,以避免浏览器的重复提交提示。 |
| 304 | Not Modified (Not Modified) | 表示缓存的资源未发生变化,因此不会重新发送响应体。 | 在缓存仍然有效时,针对使用 If-None-Match / If-Modified-Since 的条件请求返回。 |
| 307 | Temporary Redirect (Temporary Redirect) | 一种临时重定向,与 302 不同,重新发送时会保留原始的方法和请求体。 | 用于需要重定向 POST/PUT 请求同时保留请求体的 API 设计。 |
| 308 | Permanent Redirect (Permanent Redirect) | 一种永久重定向,与 301 不同,重新发送时会保留原始的方法和请求体。 | 用于需要永久迁移同时保留请求方法的 API 版本迁移。 |
| 4xx — 客户端错误 | |||
| 400 | Bad Request (Bad Request) | 表示请求的语法或参数格式有误,服务器无法理解。 | 通常由 JSON 语法错误、缺少必需参数或类型不匹配引起。 |
| 401 | Unauthorized (Unauthorized) | 表示缺少或提供了无效的身份验证凭据(尽管名称如此,实际含义是「未认证」)。 | 常见原因包括令牌过期、缺少 Authorization 请求头或 API 密钥错误。 |
| 402 | Payment Required (Payment Required) | 保留供未来使用,有时用于表示需要付款。 | 一些 API 会借用此状态码来表示超出使用限额或计费方案已过期。 |
| 403 | Forbidden (Forbidden) | 表示服务器理解请求,但拒绝授权执行该请求。 | 常见原因包括权限不足、IP 限制、违反 CORS 策略或文件权限配置错误。 |
| 404 | Not Found (Not Found) | 表示未能找到请求的资源。 | 通常由未注册的路由、URL 拼写错误或访问已被删除的资源引起。 |
| 405 | Method Not Allowed (Method Not Allowed) | 表示资源存在,但不允许使用指定的 HTTP 方法访问它。 | 常见于向仅支持 GET 的端点发送 POST 请求,或类似的方法不匹配情况。 |
| 406 | Not Acceptable (Not Acceptable) | 表示服务器无法生成符合客户端 Accept 请求头要求的响应。 | 例如客户端请求 Accept: application/xml,而 API 只能返回 JSON 时发生。 |
| 408 | Request Timeout (Request Timeout) | 表示服务器等待客户端完成请求时超时。 | 常由网络连接缓慢、上传文件较大或客户端在请求中途卡住引起。 |
| 409 | Conflict (Conflict) | 表示请求与资源的当前状态存在冲突。 | 常见于并发编辑时的乐观锁冲突,或尝试创建重复资源。 |
| 410 | Gone (Gone) | 表示资源已被永久移除且不会再恢复(比 404 更强烈的信号)。 | 用于明确告知搜索引擎内容已被有意删除并下线。 |
| 413 | Payload Too Large (Payload Too Large) | 表示请求体的大小超过了服务器愿意接受的限制。 | 通常由超出文件上传大小限制,或 Nginx/PHP 中请求体大小设置不足引起。 |
| 414 | URI Too Long (URI Too Long) | 表示请求的 URI 长度超过了服务器愿意处理的限制。 | 常见于将大量数据塞入 GET 查询参数中的情况。 |
| 415 | Unsupported Media Type (Unsupported Media Type) | 表示服务器不支持请求体所使用的媒体类型。 | 常见于向 JSON API 发送 Content-Type: text/plain,或类似的请求头配置错误。 |
| 422 | Unprocessable Entity (Unprocessable Entity) | 表示请求语法正确,但语义验证失败。 | 常用于报告表单验证错误,例如缺少必填字段或格式不正确。 |
| 425 | Too Early (Too Early) | 表示服务器拒绝处理可能因早期数据风险而被重放的请求。 | 可作为针对使用 TLS 1.3 0-RTT 数据的重放攻击的防御手段而返回。 |
| 429 | Too Many Requests (Too Many Requests) | 表示客户端在给定时间窗口内发送了过多请求(速率限制)。 | 由超出 API 速率限制引起;Retry-After 响应头通常会指示重试前需等待的时间。 |
| 451 | Unavailable For Legal Reasons (Unavailable For Legal Reasons) | 表示内容因法律要求(如法院命令)而无法提供。 | 当内容提供方因版权申诉或特定国家/地区的法律法规而屏蔽访问时返回。 |
| 5xx — 服务器错误 | |||
| 500 | Internal Server Error (Internal Server Error) | 表示服务器发生了意外错误,无法处理该请求。 | 原因多种多样:应用程序中未处理的异常、配置错误、数据库连接失败等等。 |
| 501 | Not Implemented (Not Implemented) | 表示服务器不支持完成该请求所需的功能。 | 常见于向较旧的服务器实现发送尚未实现的 HTTP 方法(如 PATCH)时发生。 |
| 502 | Bad Gateway (Bad Gateway) | 表示代理或网关从上游服务器收到了无效的响应。 | 通常由上游应用服务器宕机或崩溃引起。 |
| 503 | Service Unavailable (Service Unavailable) | 表示服务器暂时过载或正在维护,无法处理请求。 | 主要由高负载下的资源耗尽,或计划中的维护窗口引起。 |
| 504 | Gateway Timeout (Gateway Timeout) | 表示代理或网关未能及时收到上游服务器的响应。 | 常由后端处理耗时过长、网络延迟或上游服务器挂起引起。 |
| 505 | HTTP Version Not Supported (HTTP Version Not Supported) | 表示服务器不支持请求中使用的 HTTP 版本。 | 常见于旧客户端或配置错误的代理使用了非预期的 HTTP 版本进行通信时发生。 |
| 507 | Insufficient Storage (Insufficient Storage) | 表示服务器没有足够的存储空间来完成请求(WebDAV)。 | 当文件存储操作因磁盘空间不足而失败时返回。 |
| 508 | Loop Detected (Loop Detected) | 表示服务器在处理请求时检测到了无限循环(WebDAV)。 | 常见于 WebDAV 绑定配置中存在循环引用的情况。 |
| 511 | Network Authentication Required (Network Authentication Required) | 表示客户端需要进行身份验证才能获得网络访问权限。 | 用于重定向到强制门户登录页面,例如公共 Wi-Fi 场景。 |
使用提示
- 404 和 410 看起来相似,但 410 明确表示内容是被有意删除且不会再恢复的。对于没有替代内容的页面,使用 410 可以向搜索引擎发出更清晰的信号。
- 301 与 308、302 与 307 分别共享「永久 vs 临时」的区别,但 308 和 307 在重新发送时会保留原始的 POST 请求体,这一点与 301 和 302 不同。
- 收到 429 Too Many Requests 时,请检查
Retry-After响应头,并等待相应时间后再重试——强行持续请求可能导致完全被封禁。 - 5xx 错误表示服务器端出现了问题,而不是你的请求本身有误——在排查客户端代码之前,应先检查服务器日志和运行状态。
- 浏览器开发者工具的「网络」(Network)面板会为每个请求的状态码标注颜色。结合本表使用可以大幅提升调试效率。
常见问题
两者都表示未找到资源,但 404 是一般性的「未找到」,可能只是暂时性的;而 410 则明确表示该资源已被永久移除,且不会再恢复。对于有意删除的内容,使用 410 可以为 SEO 提供更清晰的信号。
301(永久)重定向会将旧 URL 几乎所有的排名信号转移到新 URL。302(临时)重定向则告诉搜索引擎继续将旧 URL 视为规范地址,因此永久性的迁移应始终使用 301。
401 Unauthorized 实际上的含义是「未通过身份验证」——客户端尚未证明自己的身份。403 Forbidden 则表示客户端已通过身份验证,但没有相应的权限。尽管名称容易引起误解,401 关乎「认证」,而 403 关乎「授权」。
502 表示反向代理或负载均衡器从后端应用服务器收到了无效的响应。首先应检查应用服务器进程是否正在运行、有没有崩溃。
可以使用浏览器开发者工具的「网络」(Network)面板、curl 的
-i 参数,或将代码输入本页面的查询工具来查看其含义。
闲话 ― HTTP 状态码简史
HTTP 状态码体系最早在 1996 年发布的 HTTP/1.0 规范 RFC 1945 中被标准化。1999 年发布的 HTTP/1.1(RFC 2616)确立了我们今天所使用的大部分代码体系,包括 4xx 和 5xx 系列,此后又经过 RFC 7231(2014 年)和 RFC 9110(2022 年)的延续和更新。
著名的玩笑状态码 418 I'm a teapot 出自 1998 年愚人节的一份 RFC 文档,其中描述了一个虚构的「超文本咖啡壶控制协议」(HTCPCP)。该状态码原本设定为:如果你要求一个茶壶去煮咖啡,它就会返回这个代码。
「首位数字表示大类」这一设计理念,被认为影响了后来 SMTP、FTP 等协议中的返回码体系。「1xx = 信息性响应、2xx = 成功」这种简洁的分类方式,近三十年来基本没有改变。
451 Unavailable For Legal Reasons 是相对较新的状态码,于 2015 年在 RFC 7725 中被正式标准化。数字 451 是刻意选定的,用以致敬雷·布拉德伯里(Ray Bradbury)以审查制度为主题的反乌托邦小说《华氏 451 度》(Fahrenheit 451)。