【八股文】HTTP 的常见状态码

555 阅读6分钟

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-SinceIf-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服务器错误网关超时反向代理等待上游服务器响应超时

合理使用状态码可以帮助客户端和服务器更好地理解请求的处理结果,从而提高系统的可靠性和用户体验。