HTTP常用状态码含义
一、状态码分类
HTTP状态码由三位数字组成,第一位表示类别。
| 类别 | 范围 | 含义 |
|---|---|---|
| 1xx | 100-199 | 信息性状态码 |
| 2xx | 200-299 | 成功状态码 |
| 3xx | 300-399 | 重定向状态码 |
| 4xx | 400-499 | 客户端错误 |
| 5xx | 500-599 | 服务端错误 |
二、1xx 信息性状态码
100 Continue
客户端发送Expect: 100-continue请求头后,服务器确认可以继续发送请求体。
101 Switching Protocols
协议切换,如从HTTP升级到WebSocket。
103 Early Hints
服务器在最终响应前,预先发送一些资源提示。
三、2xx 成功状态码
200 OK
请求成功。
- GET:获取资源成功
- POST:创建资源成功
- PUT:更新资源成功
201 Created
资源创建成功,通常用于POST请求。
响应中应包含Location头指向新资源。
202 Accepted
请求已接受但未处理完成,异步处理场景使用。
204 No Content
请求成功但无响应体返回。
用于DELETE操作或PUT操作不需要返回内容时。
206 Partial Content
范围请求成功,返回部分内容。
用于断点续传和大文件下载。
四、3xx 重定向状态码
301 Moved Permanently
永久重定向。
- 搜索引擎更新URL
- HTTP迁移到HTTPS
- 浏览器缓存新地址
302 Found
临时重定向。
- 临时维护页面跳转
- 未登录跳转登录页
303 See Other
使用GET方法重定向到另一个URL。
通常在POST请求处理后,重定向到结果页面。
304 Not Modified
资源未修改,使用缓存。
配合If-Modified-Since或If-None-Match使用。
307 Temporary Redirect
临时重定向,保持原请求方法。
与302区别:307保证不改变请求方法。
308 Permanent Redirect
永久重定向,保持原请求方法。
与301区别:308保证不改变请求方法。
重定向对比
| 状态码 | 类型 | 请求方法 |
|---|---|---|
| 301 | 永久 | 可能变为GET |
| 302 | 临时 | 可能变为GET |
| 303 | 临时 | 变为GET |
| 307 | 临时 | 不变 |
| 308 | 永久 | 不变 |
五、4xx 客户端错误
400 Bad Request
请求语法错误或参数无效。
常见原因:
- 请求参数格式错误
- JSON解析失败
- 缺少必要参数
401 Unauthorized
未认证,需要登录。
与403区别:401是未认证,403是已认证但无权限。
403 Forbidden
已认证但无权限访问。
常见原因:
- 权限不足
- 资源被禁止访问
- IP被限制
404 Not Found
请求的资源不存在。
常见原因:
- URL错误
- 资源已删除
- 路由配置错误
405 Method Not Allowed
请求方法不被允许。
如对只支持GET的接口发送POST请求。
响应中包含Allow头列出支持的方法。
408 Request Timeout
请求超时,服务器等待客户端发送请求超时。
409 Conflict
请求冲突。
常见场景:
- 创建已存在的资源
- 并发修改冲突
410 Gone
资源已永久删除。
与404区别:410表示资源曾经存在但已删除,404表示不确定是否曾存在。
413 Payload Too Large
请求体过大。
服务器限制上传文件大小时返回。
415 Unsupported Media Type
不支持的媒体类型。
如服务器只接受JSON,但客户端发送XML。
422 Unprocessable Entity
请求格式正确但语义错误。
常见于参数校验失败。
429 Too Many Requests
请求过于频繁,触发限流。
响应中通常包含Retry-After头。
六、5xx 服务端错误
500 Internal Server Error
服务器内部错误。
常见原因:
- 代码异常
- 配置错误
- 依赖服务故障
501 Not Implemented
服务器不支持请求的功能。
502 Bad Gateway
网关从上游服务器收到无效响应。
常见原因:
- 上游服务不可用
- Nginx转发到未启动的服务
503 Service Unavailable
服务暂不可用。
常见原因:
- 服务器过载
- 维护中
- 熔断降级
响应中包含Retry-After头。
504 Gateway Timeout
网关等待上游服务器响应超时。
与408区别:504是网关等待上游超时,408是服务器等待客户端超时。
505 HTTP Version Not Supported
不支持的HTTP版本。
七、实际应用
RESTful API设计
| 操作 | 成功状态码 | 错误状态码 |
|---|---|---|
| 查询 | 200 | 404 |
| 创建 | 201 | 400, 409 |
| 更新 | 200 | 400, 404, 409 |
| 删除 | 204 | 404 |
错误响应格式
1 | { |
SpringBoot全局异常处理
1 |
|
八、总结
HTTP状态码要点:
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务端错误
常用状态码:
- 200:成功
- 201:创建成功
- 301/302:重定向
- 400:请求错误
- 401:未认证
- 403:无权限
- 404:不存在
- 500:服务器错误
- 502/503/504:网关和服务不可用
正确使用状态码可以让API语义清晰,便于前后端协作和问题排查。
