HTTP的状态码详细介绍
HTTP 状态码是服务器响应客户端请求时返回的三位数字代码,用于表示请求的结果。它们被分为五个不同的类别,每个类别代表不同类型的响应。状态码的格式一般为三位数字,每一位的含义如下:
第一位数字:表示响应的类别。
- 1xx: 信息性响应
- 2xx: 成功响应
- 3xx: 重定向响应
- 4xx: 客户端错误
- 5xx: 服务器错误
接下来,我将对每个类别及其常见状态码做详细介绍。
1xx:信息性状态码
信息性状态码表示请求已被接收,继续处理。它们通常在连接保持开放的情况下使用,作为对请求的初步回应。
状态码 | 含义 | 说明 |
100 | Continue | 继续执行请求。客户端应继续发送请求的剩余部分。 |
101 | Switching Protocols | 服务器正在切换协议。客户端请求服务器切换到不同的协议(如 HTTP/1.1 到 HTTP/2)。 |
102 | Processing | 服务器已接受并正在处理请求,但尚未完成处理。 |
103 | Early Hints | 服务器用来预先发送一些响应头,以便客户端提前准备请求。 |
2xx:成功状态码
2xx 状态码表示服务器已成功接收并处理了请求。不同的状态码代表不同的成功情况。
状态码 | 含义 | 说明 |
200 | OK | 请求已成功。请求的响应头或数据将在响应体中返回。 |
201 | Created | 请求已被成功处理,并创建了新的资源。通常用于 POST 请求的响应。 |
202 | Accepted | 请求已被接受,但尚未处理。 |
203 | Non-Authoritative Info | 服务器返回的响应包含非授权的信息,可能来自缓存或代理服务器。 |
204 | No Content | 请求成功,但服务器没有返回任何内容。 |
205 | Reset Content | 请求成功,服务器要求客户端重置(清空)视图。 |
206 | Partial Content | 请求成功,服务器返回部分数据,通常用于处理范围请求(Range)。 |
207 | Multi-Status | 服务器返回多个状态码,通常用于 WebDAV 中的多状态响应。 |
208 | Already Reported | 服务器已报告过该资源,不需要再次处理。 |
226 | IM Used | 服务器已经应用了请求的某些变化(例如,部分响应)。 |
3xx:重定向状态码
3xx 状态码表示客户端必须采取进一步的操作才能完成请求,通常是需要重定向到另一个位置。
状态码 | 含义 | 说明 |
300 | Multiple Choices | 资源的多个表示形式可供选择,客户端需要选择一个。 |
301 | Moved Permanently | 请求的资源已被永久移动到新的 URL,客户端应使用新的 URL 发起后续请求。 |
302 | Found | 请求的资源临时移动,客户端应继续使用原 URL,重定向到新的位置。 |
303 | See Other | 客户端应使用 |
304 | Not Modified | 资源未被修改,客户端可以使用缓存的版本。 |
305 | Use Proxy | 请求的资源必须通过代理访问。 |
306 | Switch Proxy | 已废弃,不再使用。 |
307 | Temporary Redirect | 请求的资源临时重定向,客户端应使用原请求方法进行重定向。 |
308 | Permanent Redirect | 请求的资源永久重定向,客户端应使用新的 URL 进行后续请求。 |
4xx:客户端错误状态码
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 | 请求需要提供 |
412 | Precondition Failed | 请求头中的某个先决条件失败,导致请求无法继续处理。 |
413 | Payload Too Large | 请求体过大,无法处理。 |
414 | URI Too Long | 请求的 URI 太长,服务器无法处理。 |
415 | Unsupported Media Type | 请求的媒体类型不被支持。 |
416 | Range Not Satisfiable | 请求的范围不符合资源,通常在处理部分请求时出现。 |
417 | Expectation Failed | 服务器无法满足请求头中的 |
418 | I'm a teapot | HTTP 418 是一个愚蠢的状态码,表示 "我是一个茶壶", 来自 RFC 2324,通常用于玩笑。 |
421 | Misdirected Request | 请求被错误地指向了某个服务器,通常是因为 DNS 错误。 |
422 | Unprocessable Entity | 请求格式正确,但由于语义错误无法处理。 |
423 | Locked | 资源被锁定,无法进行修改。 |
424 | Failed Dependency | 依赖请求失败,通常用于 WebDAV。 |
425 | Too Early | 请求太早,服务器尚未准备好处理。 |
426 | Upgrade Required | 需要升级协议,服务器支持某个更高版本的协议。 |
427 | Unassigned | 尚未分配。 |
428 | Precondition Required | 请求需要先决条件,且没有满足条件的请求。 |
429 | Too Many Requests | 请求次数过多,通常是由于频率限制(如 API 请求次数限制)。 |
431 | Request Header Fields Too Large | 请求头字段过大,服务器无法处理。 |
451 | Unavailable For Legal Reasons | 由于法律原因,资源无法访问。 |
5xx:服务器错误状态码
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 | 服务器检测到无限循环。 |
510 | Not Extended | 请求需要扩展,但没有提供所需的扩展。 |
511 | Network Authentication Required | 需要网络身份验证才能访问资源。 |
总结
- 2xx:表示请求成功,处理完成。
- 3xx:表示请求需要重定向,客户端应进行相应操作。
- 4xx:表示客户端的错误请求。
- 5xx:表示服务器端的错误。
理解 HTTP 状态码的分类和含义,对于构建健壮的 Web 应用和 API 至关重要。通过合理地返回相应的状态码,能够向客户端清晰地传达请求的处理结果,帮助用户和开发者更高效地解决问题。