1. 什么是 HTTP 状态码
HTTP 状态码(HTTP Status Code)是服务器在响应客户端请求时返回的三位数字代码,用于表示请求的处理结果。它由 RFC 9110(原 RFC 7231)等规范定义,是 Web 开发中理解客户端与服务器交互结果的重要依据。
状态码由三位数字组成,第一位数字表示响应的类别,后两位数字表示具体的状态。通过状态码,客户端可以快速判断请求是否成功、是否需要重定向、是否发生错误等。
2. 状态码的分类
HTTP 状态码按首位数字分为五大类:
| 分类 | 范围 | 含义 |
|---|---|---|
| 1xx | 100-199 | 信息响应(Informational) |
| 2xx | 200-299 | 成功响应(Successful) |
| 3xx | 300-399 | 重定向(Redirection) |
| 4xx | 400-499 | 客户端错误(Client Error) |
| 5xx | 500-599 | 服务器错误(Server Error) |
3. 1xx 信息响应
1xx 状态码表示服务器已收到请求,正在处理中,属于临时响应。这类状态码在日常开发中较少直接遇到,常见的有:
- 100 Continue:客户端应继续发送请求的剩余部分。
- 101 Switching Protocols:服务器同意切换协议,常用于 WebSocket 升级。
- 103 Early Hints:服务器在最终响应前提前发送部分响应头,用于预加载资源。
4. 2xx 成功响应
2xx 状态码表示请求已成功被服务器接收、理解和处理。这是开发中最希望看到的一类状态码。
- 200 OK:请求成功,服务器返回所请求的资源。这是最常见的成功状态码。
- 201 Created:请求成功且服务器创建了新资源,常用于 POST 请求创建数据后返回。
- 202 Accepted:请求已接受,但处理尚未完成,常用于异步任务。
- 204 No Content:请求成功,但响应体中没有内容,常用于删除操作或表单提交后无需返回数据。
- 206 Partial Content:服务器返回了部分内容,常用于断点续传或视频分段加载。
5. 3xx 重定向
3xx 状态码表示客户端需要采取进一步操作才能完成请求,通常用于 URL 重定向。
- 301 Moved Permanently:资源已永久移动到新 URL,搜索引擎会更新链接权重。
- 302 Found:资源临时移动到新 URL,常用于临时跳转。
- 303 See Other:请求的响应可以在另一个 URL 上找到,常用于 POST 请求后的重定向。
- 304 Not Modified:资源未修改,客户端可以使用本地缓存的版本,减少带宽消耗。
- 307 Temporary Redirect:临时重定向,且保持请求方法和请求体不变。
- 308 Permanent Redirect:永久重定向,且保持请求方法和请求体不变。
6. 4xx 客户端错误
4xx 状态码表示客户端发送的请求有误,例如请求格式错误、资源不存在或权限不足。这类错误通常需要客户端修正请求。
- 400 Bad Request:请求语法错误或参数不合法,服务器无法理解。
- 401 Unauthorized:请求未认证,需要用户登录或提供有效凭证。
- 403 Forbidden:服务器理解请求但拒绝执行,通常因权限不足。
- 404 Not Found:请求的资源不存在,是最常见的错误状态码。
- 405 Method Not Allowed:请求方法不被目标资源支持,例如对只读接口发送 POST 请求。
- 408 Request Timeout:请求超时,服务器等待客户端发送请求的时间过长。
- 409 Conflict:请求与服务器当前状态冲突,例如重复创建同名资源。
- 410 Gone:资源已永久删除,且不再可用。
- 413 Payload Too Large:请求体过大,服务器拒绝处理。
- 415 Unsupported Media Type:请求的媒体类型不被服务器支持。
- 422 Unprocessable Entity:请求格式正确,但语义上有错误,常用于表单校验失败。
- 429 Too Many Requests:请求过于频繁,触发了限流。
7. 5xx 服务器错误
5xx 状态码表示服务器在处理请求时发生内部错误,或服务器本身不可用。这类错误通常需要服务端排查修复。
- 500 Internal Server Error:服务器内部发生未预期的错误,是最常见的服务器错误状态码。
- 501 Not Implemented:服务器不支持请求所需的功能。
- 502 Bad Gateway:网关或代理服务器从上游服务器收到无效响应。
- 503 Service Unavailable:服务器暂时无法处理请求,常见于过载或维护中。
- 504 Gateway Timeout:网关或代理服务器等待上游响应超时。
- 505 HTTP Version Not Supported:服务器不支持请求使用的 HTTP 协议版本。
8. 常见状态码速查表
| 状态码 | 含义 | 典型场景 |
|---|---|---|
| 200 | OK | GET 请求成功返回数据 |
| 201 | Created | POST 创建资源成功 |
| 204 | No Content | DELETE 删除成功,无返回体 |
| 301 | Moved Permanently | 网站域名变更后的永久跳转 |
| 304 | Not Modified | 浏览器缓存资源未变化 |
| 400 | Bad Request | 参数格式错误 |
| 401 | Unauthorized | 未登录访问需要认证的接口 |
| 403 | Forbidden | 已登录但无权限访问 |
| 404 | Not Found | 访问不存在的页面或接口 |
| 429 | Too Many Requests | 接口被限流 |
| 500 | Internal Server Error | 服务器代码异常 |
| 502 | Bad Gateway | 网关转发上游失败 |
| 503 | Service Unavailable | 服务过载或停机维护 |
| 504 | Gateway Timeout | 上游服务响应超时 |
9. 实战中的注意事项
在实际开发中,合理使用状态码能让接口语义更清晰,也便于前端统一处理错误。以下几点值得关注:
- 不要滥用 200:即使业务失败也返回 200 会让前端难以区分成功与失败,建议按语义返回对应状态码。
- 区分 401 和 403:401 表示未认证,应引导用户登录;403 表示已认证但无权限,应提示权限不足。
- 重定向要谨慎:301 会影响搜索引擎权重,临时跳转应使用 302 或 307。
- 限流返回 429:接口限流时返回 429,并可在响应头中携带 Retry-After 提示重试时间。
- 统一错误响应结构:建议在响应体中统一返回错误码和错误信息,方便前端解析。
10. 总结
HTTP 状态码是 Web 开发中不可或缺的基础知识。掌握 1xx 到 5xx 五大类状态码的含义和典型场景,能够帮助开发者快速定位问题、设计更规范的接口,并提升前后端协作效率。建议在开发中结合具体业务场景,选择合适的状态码,让接口语义更加清晰可靠。