常见 HTTP 状态码
常见 HTTP 状态码是服务器与客户端通信的关键标识,用于表示请求的处理结果。以下是常见状态码的区别和典型场景:
1xx(信息响应)
- 用途:临时响应,表示请求已被接收,需要继续处理。
- 常见状态码:
- 100 Continue:客户端应继续发送请求体(常用于大文件上传前的确认)。
2xx(成功)
- 用途:请求已成功被服务器接收、理解并处理。
- 典型状态码:
- 200 OK
- 场景:请求成功,响应中包含请求结果(如网页内容、API 数据)。
- 201 Created
- 场景:资源创建成功(如通过 POST 新增数据后返回新资源的 URL)。
- 204 No Content
- 场景:请求成功,但无返回内容(如 DELETE 请求成功后的响应)。
- 200 OK
3xx(重定向)
- 用途:需要客户端进一步操作以完成请求(如跳转新 URL)。
- 典型状态码:
- 301 Moved Permanently
- 场景:资源永久迁移到新 URL(如网站改版后旧链接跳转到新地址)。
- 302 Found
- 场景:资源临时重定向(如未登录用户跳转到登录页)。
- 304 Not Modified
- 场景:资源未修改,客户端可使用本地缓存(配合
If-Modified-Since使用)。
- 场景:资源未修改,客户端可使用本地缓存(配合
- 301 Moved Permanently
4xx(客户端错误)
- 用途:客户端请求有误,服务器无法处理。
- 典型状态码:
- 400 Bad Request
- 场景:请求语法错误(如 JSON 格式错误、必填参数缺失)。
- 401 Unauthorized
- 场景:未通过身份验证(如未登录用户访问需认证的接口)。
- 与 403 的区别:401 表示未认证,需提供有效凭据(如 Token)。
- 403 Forbidden
- 场景:认证成功但无权访问(如普通用户尝试访问管理员接口)。
- 404 Not Found
- 场景:请求的资源不存在(如 URL 拼写错误、资源已被删除)。
- 429 Too Many Requests
- 场景:客户端请求频率过高(如 API 限流)。
- 400 Bad Request
5xx(服务器错误)
- 用途:服务器处理请求时发生错误。
- 典型状态码:
- 500 Internal Server Error
- 场景:服务器内部错误(如代码异常、数据库连接失败)。
- 502 Bad Gateway
- 场景:代理服务器从上游服务器收到无效响应(如反向代理后的服务宕机)。
- 503 Service Unavailable
- 场景:服务器暂时不可用(如维护中或过载)。
- 504 Gateway Timeout
- 场景:代理服务器等待上游服务器响应超时。
- 500 Internal Server Error
关键区别速查表
| 状态码 | 类型 | 典型场景 | 解决方向 |
|---|---|---|---|
| 200 | 成功 | 正常请求成功 | - |
| 301 | 重定向 | 资源永久迁移 | 更新书签或链接 |
| 400 | 客户端错 | 请求参数/格式错误 | 检查请求体格式或参数 |
| 401 | 客户端错 | 未提供身份验证凭据 | 添加 Token 或登录 |
| 403 | 客户端错 | 已认证但权限不足 | 联系管理员调整权限 |
| 404 | 客户端错 | 资源不存在 | 检查 URL 或资源状态 |
| 500 | 服务器错 | 服务器代码异常 | 查看服务器日志排查问题 |
| 503 | 服务器错 | 服务器过载或维护 | 稍后重试或联系运维 |
常见混淆点
- 401 vs 403:401 是“未认证”,需登录;403 是“已认证但无权限”。
- 404 vs 410 Gone:404 是资源不存在(可能从未存在),410 是资源曾存在但被永久删除。
- 500 vs 503:500 是服务器内部错误(代码问题),503 是服务器暂时不可用(维护或过载)。
合理使用状态码有助于提高 API 的清晰度和调试效率,同时优化用户体验(如精准的错误提示)。