1. HTTP 状态码概述
HTTP 状态码是服务器对客户端请求的响应结果代码,用于表示请求的处理状态。它由三位数字组成,第一位数字定义了响应的类别,总共分为五大类。
2. HTTP 状态码五大类别
2.1 1xx - 消息通知
表示请求已被接收,需要继续处理。这类状态码是临时响应,客户端应等待服务器发送最终响应。
2.2 2xx - 成功
表示请求已成功被服务器接收、理解并接受。
2.3 3xx - 重定向
表示需要客户端采取进一步的操作才能完成请求。
2.4 4xx - 客户端错误
表示客户端可能发生了错误,妨碍了服务器的处理。
2.5 5xx - 服务端错误
表示服务器在处理请求的过程中发生了错误。
3. 常见 HTTP 状态码详解
3.1 2xx 成功状态码
200 OK
- 含义:请求成功,服务器返回了请求的数据。
- 场景:最常见的成功状态码,表示一切正常。
201 Created
- 含义:请求成功,并且服务器创建了新的资源。
- 场景:注册成功、订单创建成功、上传文件成功等。
204 No Content
- 含义:请求成功,但服务器没有返回任何内容。
- 场景:删除操作成功,服务器不需要返回资源。
3.2 3xx 重定向状态码
301 Moved Permanently
- 含义:永久重定向。请求的资源已被永久移动到新位置。
- 场景:网站改版、域名更换。
302 Found
- 含义:临时重定向。请求的资源临时从不同的 URI 响应请求。
- 场景:临时维护页面、A/B 测试。
304 Not Modified
- 含义:资源未修改。客户端有缓存的版本,且服务器确认该缓存仍然有效。
- 场景:浏览器发现本地缓存有效,服务器告诉浏览器无需重新下载资源。
3.3 4xx 客户端错误状态码
400 Bad Request
- 含义:请求参数有问题。
- 场景:请求格式错误、缺少必填字段、JSON 解析失败。
401 Unauthorized
- 含义:未认证。请求要求身份验证,但客户端未提供有效的认证信息。
- 场景:没有登录或登录信息已失效。
403 Forbidden
- 含义:已认证,但没有权限。服务器理解请求,但拒绝执行。
- 场景:有身份但没有访问该资源的资格(与 401 的区别:401 是没有身份,403 是有身份没权限)。
404 Not Found
- 含义:资源不存在。服务器找不到请求的资源。
- 场景:访问了不存在的 URL、文件已被删除。
405 Method Not Allowed
- 含义:请求方式错误。请求行中指定的请求方法不能被用于请求相应的资源。
- 场景:使用 GET 请求发送了 POST 请求、API 接口不支持该 HTTP 方法。
429 Too Many Requests
- 含义:请求过于频繁。用户在给定的时间内发送了太多请求。
- 场景:API 限流、防止暴力破解。
3.4 5xx 服务端错误状态码
500 Internal Server Error
- 含义:服务器内部异常。服务器遇到了一个未曾预料的状况,导致无法完成对请求的处理。
- 场景:网站文件错误、服务异常、数据库连接失败等。
502 Bad Gateway
- 含义:网关错误。服务器作为网关或代理,从上游服务器收到无效响应。
- 场景:Nginx 转发请求时,后端服务器挂了。
503 Service Unavailable
- 含义:服务不可用。服务器目前无法使用(由于超载或停机维护)。
- 场景:系统正在维护、服务器过载、临时下线。
504 Gateway Timeout
- 含义:网关超时。服务器作为网关或代理,没有及时从上游服务器收到请求。
- 场景:后端服务响应超时、网络延迟过高。
4. 总结
通过状态码的第一位数字,可以快速定位问题所在的层级:
- 1xx:信息性状态码,请求处理中
- 2xx:成功,请求已正确处理
- 3xx:重定向,需要进一步操作
- 4xx:客户端错误,检查请求参数和权限
- 5xx:服务端错误,服务器端出现问题
掌握这些常见的 HTTP 状态码,能够帮助开发者快速定位和解决问题,提升开发和调试效率。