HTTP 状态码
什么是 HTTP 状态码
HTTP 状态码是服务器对客户端请求的响应代码,用于表示请求的处理结果。每个状态码都是一个三位数字,第一位数字表示响应的类别。
状态码分类
HTTP 状态码按照第一位数字分为五个类别:
- 1xx(信息性响应):请求已接收,继续处理
- 2xx(成功响应):请求已成功被服务器接收、理解并处理
- 3xx(重定向):需要后续操作才能完成这一请求
- 4xx(客户端错误):请求包含错误语法或无法被执行
- 5xx(服务器错误):服务器在处理请求的过程中发生了错误
常见状态码详解
1xx 信息性响应
100 Continue
- 含义:服务器已接收到请求头,客户端应继续发送请求体
- 使用场景:大文件上传时的预检查
101 Switching Protocols
- 含义:服务器已理解请求,将通过 Upgrade 头字段切换协议
- 使用场景:WebSocket 连接建立
2xx 成功响应
200 OK
- 含义:请求成功,服务器已成功处理请求
- 使用场景:GET、POST、PUT 等请求成功时的标准响应
201 Created
- 含义:请求成功并且服务器创建了新的资源
- 使用场景:POST 请求成功创建新资源后
204 No Content
- 含义:服务器成功处理请求,但不需要返回任何实体内容
- 使用场景:DELETE 请求成功执行后
206 Partial Content
- 含义:服务器已经成功处理了部分 GET 请求
- 使用场景:断点续传、视频流媒体传输
3xx 重定向
301 Moved Permanently
- 含义:请求的资源已永久移动到新位置
- 影响:搜索引擎会更新索引,浏览器会缓存重定向
- 使用场景:网站迁移、URL 结构调整
302 Found
- 含义:请求的资源临时移动到新位置
- 影响:搜索引擎不会更新索引
- 使用场景:临时维护页面跳转
304 Not Modified
- 含义:资源未修改,可以使用缓存版本
- 使用场景:条件 GET 请求,配合 ETag 或 Last-Modified 使用
307 Temporary Redirect
- 含义:临时重定向,要求客户端保持请求方法不变
- 与 302 区别:严格要求不改变 HTTP 方法
4xx 客户端错误
400 Bad Request
- 含义:请求语法错误,服务器无法理解
- 常见原因:参数格式错误、JSON 格式错误
401 Unauthorized
- 含义:请求需要身份验证
- 响应头:通常包含
WWW-Authenticate头 - 使用场景:访问受保护资源时未提供凭证
403 Forbidden
- 含义:服务器理解请求但拒绝执行
- 与 401 区别:403 表示服务器知道客户端身份但仍拒绝访问
404 Not Found
- 含义:服务器无法找到请求的资源
- 使用场景:URL 路径错误、资源已删除
405 Method Not Allowed
- 含义:请求方法不被允许
- 响应头:必须包含
Allow头,指明允许的方法
409 Conflict
- 含义:请求与服务器当前状态冲突
- 使用场景:数据版本冲突、重复创建资源
429 Too Many Requests
- 含义:客户端发送的请求过多
- 响应头:可包含
Retry-After头 - 使用场景:API 限流保护
5xx 服务器错误
500 Internal Server Error
- 含义:服务器遇到意外错误,无法完成请求
- 常见原因:代码错误、数据库连接失败
502 Bad Gateway
- 含义:网关或代理服务器从上游服务器收到无效响应
- 使用场景:负载均衡器、CDN 与源服务器通信失败
503 Service Unavailable
- 含义:服务器暂时无法处理请求
- 响应头:可包含
Retry-After头 - 使用场景:服务器维护、过载保护
504 Gateway Timeout
- 含义:网关或代理服务器等待上游响应超时
- 使用场景:代理服务器与后端服务器通信超时
在实际开发中的应用
RESTful API 设计
1 | GET /users/123 → 200 OK (获取成功) |
缓存策略
利用状态码实现高效缓存:
1 | 304 Not Modified |
选择合适的状态码
- 语义化原则:选择最能准确描述响应状态的代码
- 一致性原则:在整个应用中保持状态码使用的一致性