HTTP 的常见状态码
HTTP 状态码(Status Codes)是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理结果。状态码分为五类,每类以不同的数字开头,具有特定的含义。以下是常见的 HTTP 状态码及其适用场景:
1. 1xx(信息性状态码)
表示请求已被接收,需要继续处理。
1.1 100 Continue
-
含义:客户端应继续发送请求体。
-
适用场景:
- 客户端发送了一个包含较大请求体的请求,服务器在接收请求头后返回
100 Continue,表示可以继续发送请求体。
- 客户端发送了一个包含较大请求体的请求,服务器在接收请求头后返回
1.2 101 Switching Protocols
-
含义:服务器同意切换协议(例如从 HTTP 切换到 WebSocket)。
-
适用场景:
- 客户端请求协议升级时(如 WebSocket 握手)。
2. 2xx(成功状态码)
表示请求已成功处理。
2.1 200 OK
-
含义:请求成功,响应中包含请求的资源。
-
适用场景:
- 最常见的成功状态码,适用于大多数成功的请求(例如加载网页、获取数据)。
2.2 201 Created
-
含义:请求成功,并在服务器上创建了新资源。
-
适用场景:
- 客户端通过 POST 请求创建资源时(例如提交表单、上传文件)。
2.3 204 No Content
-
含义:请求成功,但响应中没有内容。
-
适用场景:
- 客户端不需要返回数据时(例如删除资源成功)。
2.4 206 Partial Content
-
含义:服务器成功处理了部分 GET 请求。
-
适用场景:
- 客户端请求部分资源时(例如断点续传、分块下载)。
3. 3xx(重定向状态码)
表示需要客户端进一步操作以完成请求。
3.1 301 Moved Permanently
-
含义:请求的资源已永久移动到新位置。
-
适用场景:
- 网站迁移或 URL 结构调整时,将旧 URL 重定向到新 URL。
3.2 302 Found
-
含义:请求的资源临时移动到新位置。
-
适用场景:
- 临时重定向(例如维护页面、A/B 测试)。
3.3 304 Not Modified
-
含义:资源未修改,客户端可以使用缓存的版本。
-
适用场景:
- 客户端发送条件请求(例如
If-Modified-Since或If-None-Match)时,服务器发现资源未修改。
- 客户端发送条件请求(例如
3.4 307 Temporary Redirect
-
含义:请求的资源临时移动到新位置,且请求方法和请求体不变。
-
适用场景:
- 临时重定向,且需要保持请求方法(例如 POST 请求)。
4. 4xx(客户端错误状态码)
表示客户端请求有误,服务器无法处理。
4.1 400 Bad Request
-
含义:请求无效,服务器无法理解。
-
适用场景:
- 客户端发送的请求格式错误(例如缺少必要参数、JSON 格式错误)。
4.2 401 Unauthorized
-
含义:请求需要身份验证。
-
适用场景:
- 客户端未提供有效的身份验证信息(例如未登录或 Token 过期)。
4.3 403 Forbidden
-
含义:服务器拒绝请求。
-
适用场景:
- 客户端没有权限访问资源(例如未授权的用户尝试访问管理页面)。
4.4 404 Not Found
-
含义:请求的资源不存在。
-
适用场景:
- 客户端请求的资源在服务器上找不到(例如错误的 URL)。
4.5 405 Method Not Allowed
-
含义:请求方法不被允许。
-
适用场景:
- 客户端使用了服务器不支持的方法(例如对只支持 GET 的接口发送 POST 请求)。
4.6 429 Too Many Requests
-
含义:客户端发送了过多请求。
-
适用场景:
- 客户端超出速率限制时(例如防止 DDoS 攻击)。
5. 5xx(服务器错误状态码)
表示服务器处理请求时发生错误。
5.1 500 Internal Server Error
-
含义:服务器内部错误。
-
适用场景:
- 服务器遇到意外错误,无法完成请求(例如代码异常、数据库连接失败)。
5.2 502 Bad Gateway
-
含义:服务器作为网关或代理时,从上游服务器收到无效响应。
-
适用场景:
- 反向代理服务器无法从上游服务器获取有效响应时。
5.3 503 Service Unavailable
-
含义:服务器暂时无法处理请求。
-
适用场景:
- 服务器过载或维护时。
5.4 504 Gateway Timeout
-
含义:服务器作为网关或代理时,未能及时从上游服务器收到响应。
-
适用场景:
- 反向代理服务器等待上游服务器响应超时时。
6. 总结
HTTP 状态码是客户端与服务器通信的重要工具,用于快速了解请求的处理结果。以下是常见状态码的分类及适用场景:
| 状态码 | 类别 | 含义 | 适用场景 |
|---|---|---|---|
| 100 | 信息性 | 继续发送请求体 | 客户端发送较大请求体时 |
| 101 | 信息性 | 切换协议 | 协议升级(如 WebSocket) |
| 200 | 成功 | 请求成功 | 大多数成功的请求 |
| 201 | 成功 | 资源已创建 | 创建新资源(如 POST 请求) |
| 204 | 成功 | 无内容 | 不需要返回数据时(如删除资源) |
| 206 | 成功 | 部分内容 | 断点续传、分块下载 |
| 301 | 重定向 | 永久重定向 | 网站迁移或 URL 结构调整 |
| 302 | 重定向 | 临时重定向 | 临时维护页面或 A/B 测试 |
| 304 | 重定向 | 未修改 | 客户端使用缓存时 |
| 307 | 重定向 | 临时重定向(保持方法) | 临时重定向且保持请求方法 |
| 400 | 客户端错误 | 请求无效 | 请求格式错误或缺少参数 |
| 401 | 客户端错误 | 未授权 | 需要身份验证时 |
| 403 | 客户端错误 | 禁止访问 | 客户端没有权限访问资源 |
| 404 | 客户端错误 | 资源未找到 | 请求的资源不存在 |
| 405 | 客户端错误 | 方法不被允许 | 使用了不支持的方法 |
| 429 | 客户端错误 | 请求过多 | 超出速率限制时 |
| 500 | 服务器错误 | 服务器内部错误 | 服务器遇到意外错误 |
| 502 | 服务器错误 | 网关错误 | 反向代理无法从上游服务器获取有效响应 |
| 503 | 服务器错误 | 服务不可用 | 服务器过载或维护时 |
| 504 | 服务器错误 | 网关超时 | 反向代理等待上游服务器响应超时 |
合理使用状态码可以帮助客户端和服务器更好地理解请求的处理结果,从而提高系统的可靠性和用户体验。