HTTP状态码是用以表示网页服务器超文本传输协议响应状态的3位数字代码。HTTP状态码是服务器在响应客户端请求时返回的三位数字代码,每个代码代表一种特定的响应状态。
状态码的第一位数字表示响应的类别,总共有五大类:
- 1xx: 信息性状态码
- 2xx: 成功状态码
- 3xx: 重定向状态码
- 4xx: 客户端错误状态码
- 5xx: 服务器错误状态码
官方HTTP状态码
标准的HTTP状态代码是由IETF(互联网工程任务组)在各种RFC(请求评论)文档中定义的。它们是用于客户端和服务器之间通信的标准化响应代码。HTTP状态码的官方注册表由Internet Assigned Numbers Authority(互联网号码分配局)维护。
1xx: 信息性状态码
这些状态码表示请求已被接收,需要继续处理。
- 100 Continue: 客户端应继续其请求。
- 101 Switching Protocols: 服务器正在根据客户端的请求切换协议。
- 102 Processing: 服务器已接受请求,但尚未处理完毕(WebDAV)。
- 103 Early Hints: 服务器发送初步响应,帮助客户端提前加载资源。
2xx: 成功状态码
这些状态码表示请求已成功接收、理解并处理。
- 200 OK: 请求成功。
- 201 Created: 请求成功,并且创建了新的资源。
- 202 Accepted: 请求已接受,但尚未处理完成。
- 203 Non-Authoritative Information: 请求成功,但返回的元信息不是来自服务器的原始资源。
- 204 No Content: 请求成功,但没有返回内容。
- 205 Reset Content: 请求成功,请客户端重置视图。
- 206 Partial Content: 服务器成功处理了部分请求。
- 207 Multi-Status: 多个状态码返回(WebDAV)。
- 208 Already Reported: 当前资源的成员已经在(一个之前的)多状态响应中列出(WebDAV)。
- 226 IM Used: 服务器完成了对资源的IM(实例操纵)。
3xx: 重定向状态码
这些状态码表示客户端需要采取进一步的操作以完成请求。
- 300 Multiple Choices: 多种选择。
- 301 Moved Permanently: 资源已永久移动到新位置。
- 302 Found: 临时重定向,资源暂时位于其他位置。
- 303 See Other: 查看其他位置。
- 304 Not Modified: 资源未修改,客户端可以使用缓存版本。
- 305 Use Proxy: 必须通过代理访问资源(已废弃)。
- 306 Switch Proxy: 已废弃,不再使用。
- 307 Temporary Redirect: 临时重定向,使用相同的方法访问不同的URL。
- 308 Permanent Redirect: 永久重定向,使用相同的方法访问不同的URL。
4xx: 客户端错误状态码
这些状态码表示客户端可能存在错误,阻止服务器处理请求。
- 400 Bad Request: 服务器无法理解请求。
- 401 Unauthorized: 请求未授权,客户端需要进行身份验证。
- 402 Payment Required: 保留状态码,未来使用。
- 403 Forbidden: 服务器拒绝请求。
- 404 Not Found: 服务器找不到请求的资源。
- 405 Method Not Allowed: 请求方法不被允许。
- 406 Not Acceptable: 服务器无法根据客户端请求的内容特性返回响应。
- 407 Proxy Authentication Required: 客户端必须在代理服务器上进行身份验证。
- 408 Request Timeout: 服务器在等待请求时超时。
- 409 Conflict: 请求与服务器当前状态发生冲突。
- 410 Gone: 请求的资源已永久删除。
- 411 Length Required: 服务器拒绝接受不带Content-Length头的请求。
- 412 Precondition Failed: 服务器未满足请求中的前提条件。
- 413 Payload Too Large: 请求实体过大,服务器无法处理。
- 414 URI Too Long: 请求的URI过长,服务器无法处理。
- 415 Unsupported Media Type: 请求的媒体格式不受支持。
- 416 Range Not Satisfiable: 请求范围不符合资源范围。
- 417 Expectation Failed: 服务器无法满足Expect请求头字段的要求。
- 418 I’m a teapot: 用于愚人节玩笑的状态码。
- 421 Misdirected Request: 请求被定向到无法产生响应的服务器。
- 422 Unprocessable Entity: 语义错误,无法响应(WebDAV)。
- 423 Locked: 当前资源被锁定(WebDAV)。
- 424 Failed Dependency: 前一个请求失败(WebDAV)。
- 425 Too Early: 服务器拒绝处理可能重放的请求。
- 426 Upgrade Required: 客户端应切换到其他协议。
- 428 Precondition Required: 需要先决条件。
- 429 Too Many Requests: 请求过多,客户端被限流。
- 431 Request Header Fields Too Large: 请求头字段过大,服务器无法处理。
- 451 Unavailable For Legal Reasons: 因法律原因不可用。
5xx: 服务器错误状态码
这些状态码表示服务器在处理请求时发生错误。
- 500 Internal Server Error: 服务器遇到未知错误。
- 501 Not Implemented: 服务器不支持请求的方法。
- 502 Bad Gateway: 网关或代理服务器收到无效响应。
- 503 Service Unavailable: 服务器暂时不可用,通常是由于维护或过载。
- 504 Gateway Timeout: 网关或代理服务器在等待上游服务器响应时超时。
- 505 HTTP Version Not Supported: 服务器不支持请求的HTTP协议版本。
- 506 Variant Also Negotiates: 服务器内部配置错误。
- 507 Insufficient Storage: 服务器无法存储完成请求所需的内容(WebDAV)。
- 508 Loop Detected: 服务器检测到无限循环(WebDAV)。
- 510 Not Extended: 服务器需要进一步扩展请求。
- 511 Network Authentication Required: 需要网络身份验证。
非官方HTTP状态码
上述状态代码是标准化的,但在实际应用中,有时会出现非标准的状态代码。这些状态代码通常由特定的服务或软件定义,以表示特定的错误或状态。
1. 218 “Good”
- 定义者: Apache
- 用途: 用于表示“良好”的请求。这是一个非官方状态码,主要用于Apache服务器的某些定制设置。
2. 419 “Page Expired”
- 定义者: Laravel 框架
- 用途: 表示页面过期,通常与会话或CSRF令牌相关。
3. 420 “Method Failure”
- 定义者: Spring Framework
- 用途: 表示方法执行失败。这是一个非官方状态码,用于表示在处理请求时发生错误。
4. 420 “Enhance Your Calm”
- 定义者: Twitter
- 用途: 这个状态码用于表示用户的请求被限流,因为请求过于频繁,服务器要求用户减缓请求速度。
5. 430 “Request Header Fields Too Large”
- 定义者: Shopify
- 用途: 表示请求头字段过大,服务器无法处理。这与RFC 2616中的431状态码类似,但为非官方扩展。
6. 440 “Login Timeout”
- 定义者: IIS
- 用途: 表示会话超时,用户需要重新登录。
7. 444 “No Response”
- 定义者: nginx
- 用途: 表示服务器关闭连接而不返回任何响应。这通常用于拦截恶意请求或不需要回应的请求。
8. 449 “Retry”
- 定义者: IIS
- 用途: 表示请求应重新提交。这通常用于指示客户端需要进行某些调整后再尝试请求。
9. 450 “Blocked by Windows Parental Controls”
- 定义者: Microsoft
- 用途: 表示请求被Windows家长控制设置阻止。
10. 451 “Redirect”
- 定义者: IIS
- 用途: 用于指示请求被重定向。
11. 460
- 定义者: AWS Elastic Load Balancer
- 用途: 表示负载均衡器的内部错误。
12. 463
- 定义者: AWS Elastic Load Balancer
- 用途: 表示负载均衡器遇到的请求错误。
13. 494 “Request Header Too Large”
- 定义者: nginx
- 用途: 表示请求头字段过大,服务器无法处理。
14. 495 “SSL Certificate Error”
- 定义者: nginx
- 用途: 表示SSL证书错误,客户端证书无效。
15. 496 “SSL Certificate Required”
- 定义者: nginx
- 用途: 表示需要客户端提供SSL证书。
16. 497 “HTTP Request Sent to HTTPS Port”
- 定义者: nginx
- 用途: 表示HTTP请求发送到了HTTPS端口。
17. 498 “Invalid Token”
- 定义者: Esri
- 用途: 表示请求中的Token无效。
18. 499 “Client Closed Request”
- 定义者: nginx
- 用途: 表示客户端在服务器处理请求之前关闭了连接。
19. 499 “Token Required”
- 定义者: Esri
- 用途: 表示请求需要Token,但未提供。
20. 509 “Bandwidth Limit Exceeded”
- 定义者: Apache 和 cPanel
- 用途: 表示服务器的带宽限制已被超出。
21. 520 “Web Server Returned an Unknown Error”
- 定义者: Cloudflare
- 用途: 表示服务器返回了未知错误。
22. 521 “Web Server Is Down”
- 定义者: Cloudflare
- 用途: 表示上游服务器不可用或关闭。
23. 522 “Connection Timed Out”
- 定义者: Cloudflare
- 用途: 表示与上游服务器的连接超时。
24. 523 “Origin Is Unreachable”
- 定义者: Cloudflare
- 用途: 表示无法到达上游服务器。
25. 524 “A Timeout Occurred”
- 定义者: Cloudflare
- 用途: 表示上游服务器响应超时。
26. 525 “SSL Handshake Failed”
- 定义者: Cloudflare
- 用途: 表示SSL握手失败。
27. 526 “Invalid SSL Certificate”
- 定义者: Cloudflare
- 用途: 表示上游服务器提供的SSL证书无效。
28. 527 “Railgun Error”
- 定义者: Cloudflare
- 用途: 表示Cloudflare的Railgun服务出现错误。
29. 529 “Site Overloaded”
- 定义者: Qualys
- 用途: 表示站点超载,无法处理请求。
30. 530 “Site Frozen”
- 定义者: Pantheon
- 用途: 表示站点被冻结,通常由于计费问题或其他原因。
31. 561 “Unauthorized”
- 定义者: AWS Elastic Load Balancer
- 用途: 表示请求未经授权,类似于401状态码,但用于AWS的负载均衡器。
32. 598 “Network Read Timeout Error”
- 定义者: 某些HTTP代理
- 用途: 表示网络读取超时错误。这是一个非正式状态码,通常在代理服务器或负载均衡器中使用。