HTTP 状态码列表
面向开发者的 HTTP 状态码(1xx-5xx)完整列表,包含含义、常见原因和解决方法。内置查询工具——输入代码即可立即查看详情。
| 代码 | 名称 | 含义 | 常见原因 |
|---|---|---|---|
| 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 场景。 |
什么是 HTTP 状态码 — 理解 1xx 到 5xx 的分类
HTTP 状态码是一个三位数字,Web 服务器用它告诉客户端(浏览器或调用 API 的程序)一次请求的处理结果。首位数字表示大致分类:1xx 表示信息性响应,2xx 表示成功,3xx 表示重定向,4xx 表示客户端错误,5xx 表示服务器错误。只要记住这条规则,即使遇到不熟悉的代码,也能在查询之前大致猜出它的含义。
本工具是一个快速参考,帮助你查询开发或调试过程中遇到的任意状态码的确切含义和常见原因。除了可以直接输入代码进行查询的搜索框外,还提供了可筛选的完整状态码列表,因此在 API 开发、调试排错、SEO 审计等多种需要确认代码含义的场景中都很实用。
HTTP 状态码列表使用方法
- 输入想要查询的代码 在顶部搜索框中输入 404 或 500 等代码,名称、含义和常见原因会立即显示出来。
- 通过关键词筛选列表 如果不知道具体代码,可以在下方列表的筛选框中输入"重定向""身份验证"等关键词来查找对应的状态码。
- 利用分类标题快速定位 列表按 1xx 到 5xx 分类排列,先确认大致分类可以更快找到需要的代码。
- 阅读常见原因来排查问题 查看每个代码的"常见原因"一栏,看看是否有配置错误、超时或权限不足等与自己情况相符的内容。
用好本工具的小技巧
- 404 和 410 看起来相似,但 410 明确表示内容是被有意删除且不会再恢复的。对于没有替代内容的页面,使用 410 可以向搜索引擎发出更清晰的信号。
- 301 与 308、302 与 307 分别共享「永久 vs 临时」的区别,但 308 和 307 在重新发送时会保留原始的 POST 请求体,这一点与 301 和 302 不同。
- 收到 429 Too Many Requests 时,请检查
Retry-After响应头,并等待相应时间后再重试——强行持续请求可能导致完全被封禁。 - 5xx 错误表示服务器端出现了问题,而不是你的请求本身有误——在排查客户端代码之前,应先检查服务器日志和运行状态。
- 浏览器开发者工具的「网络」(Network)面板会为每个请求的状态码标注颜色。结合本表使用可以大幅提升调试效率。
HTTP 状态码列表的应用场景
API 开发中的调试
查询自己开发的 API 或第三方 API 返回的状态码含义,帮助判断问题出在客户端还是服务器端。
SEO 审计中确认 404、301
在检查网站中 404(未找到)和 301/302(重定向)是否使用得当时,本参考可以帮助理解搜索引擎如何解读这些代码。
解析 Web 服务器日志
查询访问日志或错误日志中记录的状态码含义,有助于排查故障和分析流量模式。
在浏览器开发者工具中确认请求
将 Network 面板中显示的状态码输入本工具查询,可以快速判断响应是否符合预期。
HTTP 状态码术语表
- 重定向(3xx)
- 告知客户端所请求的资源位于另一个 URL,并提示其改为访问该 URL 的一类响应。
- 客户端错误(4xx)
- 表示请求本身或其凭据存在问题,导致服务器无法处理的一类响应。
- 服务器错误(5xx)
- 表示请求本身有效,但由于服务器端故障或配置错误而无法处理的一类响应。
- 幂等性
- 指多次发送同一请求与只发送一次得到相同结果的特性,GET、PUT、DELETE 在设计上都具备这一特性。
- 缓存
- 将之前获取的响应保存下来,以便在遇到相同请求时重复使用的机制,与 304 Not Modified 等条件请求密切相关。
- CORS(跨域资源共享)
- 用于控制不同来源之间通信的机制,违反该机制时可能表现为 403 Forbidden 等错误。
常见问题
-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):如果你让一个茶壶去煮咖啡,它自然只能返回这个哭笑不得的状态码。这个玩笑后来被不少框架和开发者社区当作彩蛋保留了下来,反倒成了 HTTP 状态码里最容易被记住的一个。
「用首位数字表示大类」这一设计理念看似简单,却影响深远——1xx 表示信息性响应、2xx 表示成功、3xx 表示重定向、4xx 表示客户端错误、5xx 表示服务器错误,这种一目了然的分类方式近三十年来基本没有改变,据说也启发了后来 SMTP、FTP 等协议设计各自的返回码体系。有趣的是,这套体系仍在持续生长:451 Unavailable For Legal Reasons 就是相对较新的成员,于 2015 年在 RFC 7725 中才被正式标准化,而数字 451 是刻意选定的,用以致敬雷·布拉德伯里(Ray Bradbury)那部以审查制度为主题的反乌托邦小说《华氏 451 度》(Fahrenheit 451)——一个技术规范里罕见的文学彩蛋。