HTTP 状态码查询
快速查询 HTTP 状态码含义,包含所有标准状态码说明
1xx 信息(4)
继续。客户端应继续发送请求的剩余部分。
切换协议。服务器已理解客户端请求,并通过 Upgrade 消息头通知客户端切换协议。
处理中。服务器已收到请求,正在处理,但尚未完成。
早期提示。用于在最终响应之前返回一些头信息,帮助客户端预加载资源。
2xx 成功(10)
成功。请求已成功处理,响应中包含请求的数据。
已创建。请求成功并创建了新的资源。通常用于 POST 请求。
已接受。请求已接受处理,但处理尚未完成。常用于异步处理。
非授权信息。服务器成功处理请求,但返回的信息可能来自第三方。
无内容。请求成功,但响应中不包含消息体。常用于 DELETE 请求。
重置内容。请求成功,客户端应重置文档视图。
部分内容。服务器成功处理了部分 GET 请求,用于断点续传。
多状态。多个状态码的响应(WebDAV)。
已报告。DAV 绑定成员已在之前的多状态响应中被列举(WebDAV)。
已使用 IM。服务器已完成 GET 请求,响应使用了实例操作。
3xx 重定向(8)
多种选择。请求的资源有多个表示形式,客户端需选择。
永久移动。请求的资源已永久移动到新位置,应使用新 URL。
临时移动。请求的资源现在临时从另一个 URL 响应。
查看其他。应使用 GET 方法访问另一个 URL 获取资源。
未修改。资源未被修改,客户端可使用缓存的版本。
使用代理(已废弃)。应通过指定代理访问资源。
临时重定向。请求应使用相同方法和消息体重定向到另一个 URL。
永久重定向。请求应使用相同方法永久重定向到另一个 URL。
4xx 客户端错误(29)
错误请求。服务器无法理解请求的格式,客户端应修改请求后重试。
未授权。请求需要用户身份验证。
需要付费。保留供将来使用,常用于付费内容。
禁止访问。服务器理解请求,但拒绝执行。
未找到。请求的资源不存在,最常见的状态码。
方法不允许。请求方法不被支持,响应中会包含 Allow 头。
不可接受。服务器无法根据客户端请求的内容类型返回响应。
需要代理身份验证。客户端必须先向代理服务器进行身份验证。
请求超时。服务器等待请求超时。
冲突。请求与服务器当前状态冲突,常用于 PUT 请求。
已删除。请求的资源已永久删除,不会再恢复。
需要长度。请求必须包含 Content-Length 头。
前置条件失败。请求头中指定的条件不满足。
请求实体过大。请求体超过了服务器愿意处理的大小。
URI 过长。请求的 URL 过长,服务器无法处理。
不支持的媒体类型。请求体的格式服务器不支持。
请求范围不满足。请求的范围无效。
期望失败。服务器无法满足请求头 Expect 字段的期望。
我是茶壶。RFC 2324 的彩蛋代码,表示服务器拒绝煮咖啡。
误导的请求。请求发送到了无法生成响应的服务器。
无法处理的实体。请求格式正确,但语义错误无法处理。
已锁定。请求的资源已被锁定(WebDAV)。
依赖失败。请求失败是因为之前的请求失败(WebDAV)。
太早。服务器不愿处理可能被重放的请求。
需要升级。客户端应切换到 TLS 协议。
需要前置条件。请求需要有条件头(如 If-Match)。
请求过多。用户发送请求过于频繁,应限制速率。
请求头字段过大。请求头太大,服务器无法处理。
因法律原因不可用。该资源因法律原因无法提供。
5xx 服务器错误(11)
服务器内部错误。服务器遇到意外情况,无法完成请求。
未实现。服务器不支持请求所需的功能。
错误网关。服务器作为网关或代理时,从上游收到无效响应。
服务不可用。服务器暂时无法处理请求,可能因过载或维护。
网关超时。服务器作为网关或代理时,等待上游响应超时。
HTTP 版本不支持。服务器不支持请求使用的 HTTP 版本。
变体也需协商。服务器配置有误,导致内容协商进入循环。
存储空间不足。服务器无法存储完成请求所需的资源(WebDAV)。
检测到循环。服务器在处理请求时检测到无限循环(WebDAV)。
未扩展。需要进一步扩展请求才能处理。
需要网络认证。需要进行网络认证才能继续(如热点登录)。
什么是 HTTP 状态码?
HTTP 状态码工具用于解释服务器在收到浏览器、爬虫、应用或 API 客户端请求后返回的响应代码。2xx 通常表示成功,3xx 表示重定向,4xx 多为客户端请求问题,5xx 则指向服务器端故障,但具体代码之间差异很大。401 和 403 不是一回事,404 和 410 对资源状态的含义不同,301 与 302 对 SEO 和缓存也有不同影响。它适合开发调试、接口联调、网站排障和客服定位问题时快速查阅。
使用方法
快速参考
- 点击任意状态码卡片即可复制
- 使用搜索框快速查找特定状态码
- 点击分类标签按状态类型筛选
- 将鼠标悬停在状态码上查看详细说明
调试技巧
- 先判断状态码所属系列:2xx 表示成功,3xx 表示重定向,4xx 表示客户端问题,5xx 表示服务端问题。
- 调试 API 时应结合状态码、响应体、响应头、请求方法和服务器日志一起分析,单凭状态码往往无法解释完整问题。
使用场景
技术原理
HTTP 状态码是响应起始行上返回的 3 位整数,由 HTTP 语义规范定义。当前的规范性参考是 RFC 9110(HTTP 语义,2022 年 6 月),它取代了早期的 RFC 7231 系列,扩展部分见 RFC 9111(缓存)、RFC 9112(HTTP/1.1)、RFC 9113(HTTP/2)和 RFC 9114(HTTP/3)。第一位数字定义响应类别,即使遇到未识别的代码也能按类别预测处理方式:1xx 信息性(临时响应,最终响应随后到达)、2xx 成功、3xx 重定向(需要用户代理进一步操作)、4xx 客户端错误(请求格式有误或无法满足)、5xx 服务器错误。缓存和中间代理必须将未知代码视为通用类别代码 x00(例如未知 4xx 按 400 处理),这就是状态码家族即使对私有或扩展代码也有意义的原因。 重定向代码携带的方法保留语义在历史上与实际意图存在偏差。RFC 9110 §15.4 对此作了明确区分:301 Moved Permanently 和 302 Found 可能将 POST 改写为 GET(这是所有浏览器在 1990 年代末期达成的事实行为,后在 RFC 7231 中正式确认);307 Temporary Redirect 和 308 Permanent Redirect 要求用户代理重复相同的方法和请求体。SEO 工具通常在 301 和 308 上传递等效的 PageRank 权重,将 302/307 视为保留原始 URL 的信号。条件状态码 304 Not Modified 和 412 Precondition Failed 依赖请求中的 If-None-Match / If-Modified-Since / ETag / Last-Modified 头部,而 206 Partial Content 响应 Range 请求时返回 Content-Range 头部,多范围请求时返回 multipart/byteranges 消息体。 4xx 和 5xx 类别在头部中携带契约细节。401 Unauthorized 必须包含 WWW-Authenticate 质询头,列出接受的认证方案(Bearer、Basic、Digest、Negotiate);缺少该头部则响应在技术上是格式错误的。405 Method Not Allowed 必须包含 Allow 头部,列出支持的方法。429 Too Many Requests、503 Service Unavailable 以及带有 Retry-After 的 301/307/308 允许服务器发出延迟信号,可以是秒数(Retry-After: 120)或 HTTP 日期(Retry-After: Wed, 21 Oct 2025 07:28:00 GMT),见 RFC 9110 §10.2.3。RFC 9110 废弃了 305 Use Proxy 和 306(保留/未使用),保留 418 I'm a teapot 作为 RFC 2324 / RFC 7168 记录的彩蛋代码,并重组了 1xx 分类,仅 100 Continue 和 101 Switching Protocols 是 HTTP/1.1 层必须实现的;102 Processing 和 103 Early Hints(RFC 8297)是可选扩展,主要通过 CDN 边缘逻辑体现。
- 规范性参考:RFC 9110(HTTP 语义,2022 年 6 月)取代 RFC 7230-7235;扩展见 RFC 9111(缓存)、9112(HTTP/1.1 线路格式)、9113(HTTP/2)、9114(HTTP/3)。
- 未知代码降级为类别代码(x00):未知 4xx 按 400 缓存和渲染,未知 5xx 按 500 处理——这就是第一位数字作为契约的意义。
- 方法保留:301/302 在历史上允许 POST → GET 改写(1990 年代浏览器分歧后正式确认);307/308 要求重放相同方法和请求体——永久 API 端点迁移应使用 308。
- 401 Unauthorized 必须携带 WWW-Authenticate;405 Method Not Allowed 必须携带 Allow;缺少这些头部违反规范,会破坏行为良好的 HTTP 客户端。
- Retry-After(RFC 9110 §10.2.3)用于 429/503/301/307/308:接受增量秒数(Retry-After: 120)或 HTTP 日期(Retry-After: Wed, 21 Oct 2025 07:28:00 GMT)——客户端应能解析两种形式。
- 条件缓存:304 Not Modified 响应 If-None-Match / If-Modified-Since 匹配时不包含消息体;206 Partial Content 响应 Range 请求时返回 Content-Range 和部分内容或 multipart/byteranges 文档。
- RFC 9110 废弃了 305 Use Proxy 和 306(保留),保留 RFC 2324 / RFC 7168 的彩蛋 418 I'm a teapot,并将 102 Processing / 103 Early Hints(RFC 8297)视为可选 1xx 扩展,许多代理会将其剥离。
示例
2xx 成功 - 200 OK 与 204 No Content
200 OK GET /api/users -> 返回响应体
201 Created POST /api/posts -> 新资源位于 Location 头
204 No Content DELETE /api/posts/42 -> 成功,但响应体为空
206 Partial 视频流或断点续传时的 Range 请求
RFC: RFC 7231 第 6.3 节定义了 2xx 成功类状态码3xx 重定向 - 301 / 302 / 304 区别
301 Moved Permanently -> 对 SEO 友好,浏览器会长期缓存新 URL
302 Found -> 临时重定向,目标地址不应被缓存
304 Not Modified -> 缓存仍然有效(ETag/Last-Modified 命中)
307 Temporary Redirect -> 类似 302,但请求方法不能改变(POST 仍然是 POST)
308 Permanent Redirect -> 类似 301,但保留原请求方法
RFC: RFC 7231 第 6.4 节定义了 3xx 重定向状态码
RFC: RFC 7232 第 4.1 节定义了 304 Not Modified 语义4xx 客户端错误 - 鉴权与权限
400 Bad Request JSON 格式错误,或缺少必填字段
401 Unauthorized 未携带或令牌无效,调用方需要先认证
403 Forbidden 已认证但没有权限访问该资源
404 Not Found 资源不存在(出于安全考虑,也可故意返回 404)
409 Conflict 键冲突或乐观锁版本不匹配
429 Too Many Reqs 触发限流——参考 Retry-After 响应头
RFC: RFC 7231 第 6.5 节定义了 4xx 客户端错误码
RFC: RFC 6585 第 4 节定义了 429 Too Many Requests5xx 服务端错误 - 排查上游故障
500 Internal Server Error 应用代码未捕获的异常——查日志
502 Bad Gateway Nginx/上游收到了后端返回的无效响应
503 Service Unavailable 维护中、过载,或应用正在启动
504 Gateway Timeout 上游在代理超时时间内没有响应
RFC: RFC 7231 第 6.6 节定义了 5xx 服务端错误码
快速判断: 5xx = 我们的问题,4xx = 调用方的问题真实 curl 会话中的多种状态码
$ curl -I https://example.com/old-page
HTTP/2 301
location: https://example.com/new-page
$ curl -I https://example.com/admin
HTTP/2 401
www-authenticate: Bearer realm="api"
$ curl -X POST https://example.com/api/posts -d '{}'
HTTP/2 422
content-type: application/json
说明: 422 Unprocessable Entity 是 WebDAV 扩展(RFC 4918),常用于参数校验失败常见问题
1xx、2xx、3xx、4xx、5xx 各代表什么?
1xx 是信息性响应(实际很少见)。2xx 表示请求成功。3xx 是重定向,客户端应改请求其他 URL。4xx 是客户端问题(请求错误、缺鉴权、资源不存在)。5xx 是服务端问题(请求看上去没问题,但服务器没能完成)。看日志时,先看类别就能定位大方向。
301 和 302 有什么区别?
301 Moved Permanently 告诉客户端和搜索引擎资源已永久迁移——浏览器会大力缓存重定向,SEO 权重会传递到新 URL。302 Found 是临时重定向,客户端不应长期缓存。需要永久重定向并保留请求方法时使用 308,临时重定向并保留请求方法时使用 307。
401 和 403 应该怎么选?
401 Unauthorized 表示客户端没认证或凭据无效——响应应包含 WWW-Authenticate 头。403 Forbidden 表示服务器已经识别了你是谁,但拒绝提供该资源。401 通过登录可以解决,403 即便登录也无济于事。
已经不存在的资源应该返回 404 还是 410?
404 Not Found 的意思是“我找不到,它可能存在别处或之后会回来”。410 Gone 的意思是“资源原本在这里,是有意移除的,不要再来找了”。搜索引擎会比 404 更快地把 410 的 URL 移出索引,所以已下线、不希望被再次抓取的页面应使用 410。
调试 API 时应该怎么读状态码?
先看类别(4xx 或 5xx 决定该排查哪一边),再看具体的状态码,最后看响应体。响应体通常携带真正的错误信息和内部错误码,HTTP 状态只是分类。同时要看 Retry-After、WWW-Authenticate、Location 等响应头。
非 2xx 的状态码会影响 SEO 吗?
有的会,有的不会。长期返回 5xx 表示站点不稳定,搜索引擎最终会降低抓取频率。301/308 会传递权重;302/307 不会。410 能更快地把页面移出索引;404 会保留更久。返回 200 但内容是软 404(实际是“未找到”页面却返回 200)比真正的 404 更糟糕,会让索引被空页填满。
418、451 等冷门状态码是做什么的?
418 “I'm a teapot” 是 RFC 2324 里著名的愚人节状态码——线上服务永远不应返回它。451 Unavailable For Legal Reasons 表示资源因法律原因被屏蔽(取自 Bradbury 的《华氏 451》)。429 Too Many Requests 表示限流,应配合 Retry-After 头使用。计划维护时正确的状态码是 503 Service Unavailable。