HTTP 状态码是服务器对客户端请求的响应状态标识,由 3 位数字组成,首位数字决定核心类别。
状态码分类
| 类别 | 首位 | 含义 |
|---|
| 信息性 | 1xx | 请求已接收,正在处理 |
| 成功 | 2xx | 请求成功处理完成 |
| 重定向 | 3xx | 需要额外跳转操作 |
| 客户端错误 | 4xx | 请求本身存在问题 |
| 服务器错误 | 5xx | 服务器内部异常 |
1xx 信息性状态码
| 状态码 | 名称 | 含义 | 场景 |
|---|
| 100 | Continue | 继续发送 | 客户端询问服务器是否接受请求体 |
| 101 | Switching Protocols | 协议切换 | HTTP 切换为 WebSocket |
| 102 | Processing | 正在处理 | 长时间任务处理中 |
2xx 成功状态码
| 状态码 | 名称 | 含义 | 场景 |
|---|
| 200 | OK | 通用成功 | GET/POST 请求成功 |
| 201 | Created | 资源创建成功 | POST 新建资源 |
| 202 | Accepted | 请求已接收 | 异步任务场景 |
| 204 | No Content | 成功无响应体 | DELETE/PUT 成功 |
| 206 | Partial Content | 部分内容 | 断点续传、分片下载 |
3xx 重定向状态码
| 状态码 | 名称 | 类型 | 含义 |
|---|
| 301 | Moved Permanently | 永久 | 资源永久迁移,搜索引擎更新索引 |
| 302 | Found | 临时 | 资源临时迁移 |
| 303 | See Other | 临时 | 强制 GET 跳转,解决表单重复提交 |
| 304 | Not Modified | - | 协商缓存命中,使用本地缓存 |
| 307 | Temporary Redirect | 临时 | 保留原请求方法的跳转 |
| 308 | Permanent Redirect | 永久 | 保留原请求方法的永久跳转 |
4xx 客户端错误
| 状态码 | 名称 | 含义 |
|---|
| 400 | Bad Request | 请求格式或参数错误 |
| 401 | Unauthorized | 需要身份验证 |
| 403 | Forbidden | 已验证但无权限访问 |
| 404 | Not Found | 资源不存在 |
| 405 | Method Not Allowed | 请求方法不被允许 |
| 408 | Request Timeout | 请求超时 |
| 409 | Conflict | 请求与资源状态冲突 |
| 413 | Payload Too Large | 请求体过大 |
| 429 | Too Many Requests | 请求过于频繁 |
5xx 服务器错误
| 状态码 | 名称 | 含义 |
|---|
| 500 | Internal Server Error | 服务器内部错误 |
| 501 | Not Implemented | 功能未实现 |
| 502 | Bad Gateway | 网关收到无效响应 |
| 503 | Service Unavailable | 服务暂时不可用 |
| 504 | Gateway Timeout | 网关等待超时 |
| 505 | HTTP Version Not Supported | HTTP 版本不支持 |
关键区分
| 对比 | 区别 |
|---|
| 301 vs 302 | 前者永久,搜索引擎更新索引;后者临时 |
| 401 vs 403 | 前者未验证身份;后者已验证但无权限 |
| 502 vs 504 | 前者上游返回无效响应;后者上游未按时响应 |
| 200 vs 204 | 前者返回业务数据;后者仅告知成功 |
Comments