HTTP 状态码参考
从 100 到 511 的 HTTP 状态码,逐一说明它对开发者意味着什么、由哪份 RFC 定义,另附 nginx、Cloudflare 等产品使用的非标准状态码。
共 78 个状态码。
1xx 信息响应
服务器已收到请求,仍在处理中。这类是临时响应,在最终响应之前发送。
- 100 Continue
- 服务器已收到请求头,客户端可以发送请求体。客户端在上传大文件前发送 Expect: 100-continue 来请求这一响应。 RFC 9110
- 101 Switching Protocols
- 服务器同意按 Upgrade 头的要求切换此连接上的协议。WebSocket 连接就是这样建立的。 RFC 9110
- 102 Processing
- 服务器已接受 WebDAV 请求,仍在处理中,客户端不应因此超时。现行 WebDAV 规范已不再包含它,也很少有服务器发送。 RFC 2518
- 103 Early Hints
- 在最终响应之前随 Link 头发送,让浏览器在服务器准备页面的同时开始预加载资源或建立连接。 RFC 8297
2xx 成功
请求已被成功接收、理解并接受。
- 200 OK
- 请求成功。响应体包含结果:GET 返回资源,POST 返回操作的结果。 RFC 9110
- 201 Created
- 请求创建了新资源。Location 头通常会给出它的 URL。 RFC 9110
- 202 Accepted
- 请求已被接受处理,但处理尚未完成,仍可能失败。常见于放入队列的任务。 RFC 9110
- 203 Non-Authoritative Information
- 请求成功,但代理修改了源服务器发送的响应。 RFC 9110
- 204 No Content
- 请求成功,没有响应体需要发送。常用于 DELETE,以及客户端已掌握新状态时的 PUT 或 PATCH。 RFC 9110
- 205 Reset Content
- 请求成功,客户端应重置发出请求的视图,例如清空表单。没有响应体。 RFC 9110
- 206 Partial Content
- 响应体只包含 Range 头所请求的字节范围。用于断点续传和视频拖动播放。 RFC 9110
- 207 Multi-Status
- 响应体是一个 XML 文档,分别给出多个资源各自的状态。WebDAV 使用此状态码。 RFC 4918
- 208 Already Reported
- 在 WebDAV 的 Multi-Status 响应中,标记已经列出过的绑定成员,避免重复列出。 RFC 5842
- 226 IM Used
- 响应体是对当前资源应用一项或多项实例操作(例如增量)后的结果。它属于 HTTP 的增量编码,很少有实现。 RFC 3229
3xx 重定向
客户端需要进一步操作才能完成请求,通常是向另一个 URL 发起请求。
- 300 Multiple Choices
- 资源有多种表示形式,客户端可以从中选择一种。很少使用,因为没有标准的选择方式。 RFC 9110
- 301 Moved Permanently
- 永久重定向:资源有了新的 URL,在 Location 头中给出,搜索引擎通常会改为收录该 URL。客户端跟随重定向时可能把 POST 改为 GET;要保留请求方法,请用 308。 RFC 9110
- 302 Found
- 临时重定向:资源目前位于另一个 URL,在 Location 头中给出。客户端跟随重定向时可能把 POST 改为 GET;要保留请求方法,请用 307。 RFC 9110
- 303 See Other
- 结果在另一个 URL,客户端应使用 GET 获取。这是表单 POST 之后常用的重定向,这样刷新页面不会再次提交表单。 RFC 9110
- 304 Not Modified
- 客户端缓存中的副本仍是最新的,因此不发送响应体。它是对带有 If-None-Match 或 If-Modified-Since 的条件请求的响应。 RFC 9110
- 305 Use Proxy
- 必须通过 Location 头中指定的代理访问该资源。出于安全原因已被弃用,客户端不应依赖它。 RFC 9110
- 306 (Unused)
- 规范的早期版本使用过这个状态码。现已不再使用,但编号仍然保留。 RFC 9110
- 307 Temporary Redirect
- 资源暂时位于另一个 URL,客户端必须用相同的方法和请求体向那里重新发送请求。 RFC 9110
- 308 Permanent Redirect
- 资源有了新的永久 URL,客户端必须用相同的方法和请求体向那里重新发送请求。 RFC 9110
4xx 客户端错误
问题出在客户端的请求上:格式有误、缺少权限,或请求了无法提供的内容。
- 400 Bad Request
- 请求格式有误,服务器无法处理:语法错误、报文格式无效,或请求体无法解析。 RFC 9110
- 401 Unauthorized
- 请求缺少有效的凭据。响应的 WWW-Authenticate 头说明了如何进行身份验证。尽管名称如此,这个状态码关乎身份验证,而不是权限。 RFC 9110
- 402 Payment Required
- 保留供将来使用。有些 API 在订阅到期或付费配额用尽时返回它。 RFC 9110
- 403 Forbidden
- 服务器理解请求,但拒绝执行。如果请求带有凭据,这些凭据无权访问此资源,再次发送也无济于事。 RFC 9110
- 404 Not Found
- 服务器在这个 URL 上没有内容,或者不想透露有内容。这个状态码并不说明资源是否永久不存在。 RFC 9110
- 405 Method Not Allowed
- 资源存在,但不支持此请求方法。Allow 头列出了它支持的方法。 RFC 9110
- 406 Not Acceptable
- 服务器无法生成满足请求中 Accept、Accept-Language 或 Accept-Encoding 头的响应。 RFC 9110
- 407 Proxy Authentication Required
- 与 401 类似,但客户端必须按 Proxy-Authenticate 头的说明向代理进行身份验证。 RFC 9110
- 408 Request Timeout
- 服务器等待超时,没有在限定时间内收到完整的请求,因此关闭连接。 RFC 9110
- 409 Conflict
- 请求与资源的当前状态冲突,例如基于过时版本的修改,或唯一值重复。 RFC 9110
- 410 Gone
- 资源曾经在这里,现已被永久删除。与 404 不同,它告诉客户端和搜索引擎可以不再保留这个 URL。 RFC 9110
- 411 Length Required
- 请求没有 Content-Length 头,服务器因此拒绝了请求。 RFC 9110
- 412 Precondition Failed
- If-Match、If-Unmodified-Since 或类似请求头中的条件不成立,因此请求未被执行。它可以防止覆盖别人所做的修改。 RFC 9110
- 413 Content Too Large
- 请求体超过了服务器接受的大小,通常是服务器或其前面代理的上传限制所致。它以前的名称是 Payload Too Large。 RFC 9110
- 414 URI Too Long
- URL 超过了服务器接受的长度。这通常意味着本应放在 POST 请求体中的数据被放进了查询字符串。 RFC 9110
- 415 Unsupported Media Type
- 服务器不接受请求体的格式,即 Content-Type 或 Content-Encoding 头所声明的格式。 RFC 9110
- 416 Range Not Satisfiable
- Range 头请求的字节超出了资源的范围。 RFC 9110
- 417 Expectation Failed
- 服务器无法满足请求中 Expect 头提出的要求。 RFC 9110
- 418 I'm a teapot
- 源自超文本咖啡壶控制协议(Hyper Text Coffee Pot Control Protocol)的愚人节玩笑:茶壶拒绝煮咖啡。RFC 9110 把这个编号列为未使用并予以保留,因为它作为玩笑被部署得太多,已无法再赋予其他含义。 RFC 2324, RFC 9110
- 421 Misdirected Request
- 请求到达了一台未配置为响应此主机名的服务器。浏览器把 HTTP/2 连接复用于其他主机时可能出现这种情况;客户端可以在新连接上重试。 RFC 9110
- 422 Unprocessable Content
- 请求的语法正确,但内容无效,例如未通过校验的 JSON 请求体。它源自 WebDAV,当时的名称是 Unprocessable Entity。 RFC 9110, RFC 4918
- 423 Locked
- 该 WebDAV 资源已被锁定,无法对其应用此方法。 RFC 4918
- 424 Failed Dependency
- 未对此 WebDAV 资源执行该方法,因为它所依赖的另一个操作失败了。 RFC 4918
- 425 Too Early
- 服务器不会处理通过 TLS 早期数据(early data)到达的请求,因为它可能是重放的请求。客户端应在握手完成后重新发送。 RFC 8470
- 426 Upgrade Required
- 服务器拒绝通过当前协议处理请求,并在 Upgrade 头中指明客户端必须切换到的协议。 RFC 9110
- 428 Precondition Required
- 服务器要求请求必须是条件请求,例如带上 If-Match,以免更新在不知不觉中覆盖较新的版本。 RFC 6585
- 429 Too Many Requests
- 客户端在给定时间内发送的请求过多,这称为限流(rate limiting)。Retry-After 头可能会说明需要等待多久。 RFC 6585
- 431 Request Header Fields Too Large
- 请求头总体或其中某一个超过了服务器接受的大小。常见原因是 Cookie 过大。 RFC 6585
- 451 Unavailable For Legal Reasons
- 服务器因法律要求(例如法院命令)而拒绝访问。这个编号取自小说《华氏 451》。 RFC 7725
5xx 服务器错误
请求本身可能有效,但服务器或其前面的网关未能完成它。
- 500 Internal Server Error
- 服务器遇到了意料之外的情况,往往是未处理的异常。原因要到服务器日志中查找。 RFC 9110
- 501 Not Implemented
- 服务器不支持请求所需的功能,例如它无法识别的请求方法。 RFC 9110
- 502 Bad Gateway
- 网关或代理从其后端服务器收到了无效的响应。往往是代理后面的应用崩溃了,或者没有在监听。 RFC 9110
- 503 Service Unavailable
- 服务器由于过载或维护,暂时无法处理请求。Retry-After 头可能会说明何时重试。 RFC 9110
- 504 Gateway Timeout
- 网关或代理等待其后端服务器的响应超时。往往是应用太慢或无法访问。 RFC 9110
- 505 HTTP Version Not Supported
- 服务器不支持请求所用的 HTTP 主版本。 RFC 9110
- 506 Variant Also Negotiates
- 服务器配置有误:透明内容协商选中的变体本身也被配置为进行协商,从而形成循环。 RFC 2295
- 507 Insufficient Storage
- 服务器无法存储完成请求所需的内容。它是为 WebDAV 定义的。 RFC 4918
- 508 Loop Detected
- 服务器在遍历绑定时发现了无限循环,因此终止了 WebDAV 操作。 RFC 5842
- 510 Not Extended
- 请求缺少服务器要求的扩展。定义此状态码的规范现已被列为历史文档(Historic),IANA 注册表将该状态码标记为已废弃。 RFC 2774
- 511 Network Authentication Required
- 客户端必须通过身份验证才能访问网络。发送它的是强制门户(captive portal),例如酒店 Wi-Fi 的登录页,而不是所请求的网站。 RFC 6585
非标准状态码
这些状态码不在 IANA 注册表中。每个都属于特定的服务器或服务,其含义只在那里成立。
- 419 Page Expired 非标准
- 表单的 CSRF 令牌缺失或已过期时,Laravel 会返回它。 Laravel
- 444 No Response 非标准
- nginx 配置可以返回 444,不发送任何响应就关闭连接。它会出现在 nginx 日志中,而客户端什么也收不到。 nginx
- 494 Request Header Too Large 非标准
- 请求头超出 nginx 的缓冲区时,nginx 在内部使用它。客户端收到的是 400 响应。 nginx
- 495 SSL Certificate Error 非标准
- 客户端证书验证失败时,nginx 在内部使用它。除非配置中另作处理,否则客户端收到的是 400 响应。 nginx
- 496 SSL Certificate Required 非标准
- 客户端没有提供服务器要求的证书时,nginx 在内部使用它。 nginx
- 497 HTTP Request Sent to HTTPS Port 非标准
- 普通 HTTP 请求到达要求 HTTPS 的端口时,nginx 在内部使用它。 nginx
- 499 Client Closed Request 非标准
- 客户端在服务器响应之前关闭了连接时,nginx 会记录它。这通常意味着客户端的超时时间短于应用的处理时间。 nginx
- 509 Bandwidth Limit Exceeded 非标准
- 网站用完带宽配额时,cPanel 等主机控制面板会返回它。 cPanel
- 520 Web Server Returned an Unknown Error 非标准
- 源服务器返回空的、未知的或意外的响应时,Cloudflare 会返回它。 Cloudflare
- 521 Web Server Is Down 非标准
- 源服务器拒绝了 Cloudflare 的连接时,Cloudflare 会返回它。 Cloudflare
- 522 Connection Timed Out 非标准
- Cloudflare 与源服务器建立 TCP 连接超时时,会返回它。 Cloudflare
- 523 Origin Is Unreachable 非标准
- Cloudflare 无法连接到源服务器时会返回它,原因可能是 DNS 记录有误或路由问题。 Cloudflare
- 524 A Timeout Occurred 非标准
- Cloudflare 已连接到源服务器,但源服务器没有及时发送 HTTP 响应。 Cloudflare
- 525 SSL Handshake Failed 非标准
- Cloudflare 与源服务器之间的 TLS 握手失败时,Cloudflare 会返回它。 Cloudflare
- 526 Invalid SSL Certificate 非标准
- Cloudflare 无法验证源服务器的 TLS 证书时,会返回它。 Cloudflare