一、总览:状态码的 5 个大类(第一位数字)
|-----|----------|-----------|----------------------|
| 分类 | 范围 | 类别名称 | 核心含义 |
| 1xx | 100--101 | 信息响应 | 请求已被接收,继续处理 |
| 2xx | 200--206 | 成功 | 请求成功完成 |
| 3xx | 300--308 | 重定向 | 需要进一步操作(如跳转) |
| 4xx | 400--451 | 客户端错误 | 请求有误或被拒绝(问题出在客户端) |
| 5xx | 500--511 | 服务器错误 | 服务器未能完成有效请求(问题出在服务器) |
记忆技巧:
1xx:告诉你"收到,还在处理"。
2xx:"一切 OK"。
3xx:"去别处找"。
4xx:"你(客户端)错了"。
5xx:"我(服务器)错了"。
二、详细分类与常见状态码
1. 1xx 信息响应
|-----|---------------------|-----------------------------------------------------|
| 状态码 | 短语 | 含义 |
| 100 | Continue | 客户端应继续发送请求(用于大请求体,客户端先发部分头部,服务器返回 100 表示可以继续发 body) |
| 101 | Switching Protocols | 服务器同意切换协议(如从 HTTP 升级到 WebSocket) |
实际开发中很少直接处理 1xx,但了解有助于理解 HTTP 通信细节。
2. 2xx 成功
|-----|-----------------|------------------------------------|
| 状态码 | 短语 | 含义 |
| 200 | OK | 最常⻅ 。请求成功,返回内容 |
| 201 | Created | 请求成功且服务器创建了新资源(通常用于 POST 或 PUT 后) |
| 202 | Accepted | 请求已接受,但尚未处理完成(适用于异步任务) |
| 204 | No Content | 请求成功,但响应体中无内容(常用于 DELETE 或需要刷新的场景) |
| 206 | Partial Content | 返回部分内容,用于断点续传或范围请求(如视频拖拽) |
3. 3xx 重定向
|-----|----------------------------------------|-------------------------------------------|
| 状态码 | 短语 | 含义 |
| 301 | Moved Permanently | 永久重定向 ,资源新 URL 固定,以后请使用新地址(搜索引擎会更新索引) |
| 302 | Found (Previously "Moved Temporarily") | 临时重定向 ,资源暂时换地方,下次还用旧 URL |
| 303 | See Other | 通常用于 POST 后重定向到 GET 结果页面(防止重复提交) |
| 304 | Not Modified | 缓存相关 。资源未变化,请直接使用缓存 |
| 307 | Temporary Redirect | 类似 302,但 不允许改变请求方法 (如 POST 不能变成 GET) |
| 308 | Permanent Redirect | 类似 301,但 不允许改变请求方法 |
301 vs 302 要点:
301:永久,浏览器/搜索引擎会更新书签。
302:临时,下次仍访问原 URL。
4. 4xx 客户端错误(重点记忆)
|-----|-------------------------------|---------------------|------------------------|
| 状态码 | 短语 | 含义 | 典型场景 |
| 400 | Bad Request | 请求语法错误或无法理解 | 参数格式不对、JSON 解析失败 |
| 401 | Unauthorized | 缺少认证 ,通常需要登录 | 未提供 token,或 token 过期 |
| 403 | Forbidden | 拒绝访问 ,即使认证了也无权限 | 普通用户试图访问管理员页面 |
| 404 | Not Found | 资源不存在 | URL 输错、接口已删除 |
| 405 | Method Not Allowed | 方法不被允许 | 对接口用了 DELETE,但它只支持 GET |
| 408 | Request Timeout | 请求超时 | 客户端发送请求太慢,服务器放弃等待 |
| 413 | Payload Too Large | 请求体过大 | 上传文件超过服务器限制 |
| 414 | URI Too Long | URL 过长 | GET 请求拼接了大量参数 |
| 415 | Unsupported Media Type | 不支持的媒体类型 | 发 JSON 但接口只接受 XML |
| 429 | Too Many Requests | 请求过于频繁(限流) | API 速率限制触发 |
| 451 | Unavailable For Legal Reasons | 因法律原因不可访问 | 版权、地区封锁 |
401 vs 403 核心区别
401:未认证。服务器说:"你是谁?请先证明身份。" → 可重新登录后重试。
403:已认证但无权。服务器说:"我知道你是谁,但你不被允许进入。" → 即使重试也无用(除非改权限)。
5. 5xx 服务器错误
|-----|----------------------------|---------------------|-------------------------|
| 状态码 | 短语 | 含义 | 典型场景 |
| 500 | Internal Server Error | 通用服务器内部错误 | 代码抛出未捕获的异常、空指针、数据库连接失败 |
| 501 | Not Implemented | 服务器不支持请求的功能 | 请求了一个未实现的 HTTP 方法 |
| 502 | Bad Gateway | 网关/代理 从上游收到无效响应 | 反向代理无法连接到后端服务 |
| 503 | Service Unavailable | 服务器暂时不可用(过载或停机) | 流量暴增、正在维护、容器未就绪 |
| 504 | Gateway Timeout | 网关/代理 等待上游响应超时 | 后端服务响应太慢,代理等不及了 |
| 505 | HTTP Version Not Supported | HTTP 版本不支持 | 客户端用了 HTTP/2,服务器只支持 1.1 |
502 vs 504:
502:上游返回了错误响应(如连接拒绝、协议错误)。
504:上游根本没响应(超时)。
三、完整状态码快速参考表(常用部分)
|-----|-----------------------|--------------|
| 状态码 | 短语 | 简要场景 |
| 200 | OK | 正常 |
| 201 | Created | 创建成功 |
| 204 | No Content | 删除成功或无返回体 |
| 301 | Moved Permanently | 永久跳转 |
| 302 | Found | 临时跳转 |
| 304 | Not Modified | 使用缓存 |
| 400 | Bad Request | 请求参数错误 |
| 401 | Unauthorized | 未登录 |
| 403 | Forbidden | 无权限 |
| 404 | Not Found | 资源不存在 |
| 405 | Method Not Allowed | 方法不允许 |
| 429 | Too Many Requests | 频率超限 |
| 500 | Internal Server Error | 服务器代码报错 |
| 502 | Bad Gateway | 网关到后端出错 |
| 503 | Service Unavailable | 服务不可用(过载/维护) |
| 504 | Gateway Timeout | 网关超时 |
四、小技巧与易混淆点总结
- 4xx:客户端请求有问题 → 改完代码或参数就能好。
- 5xx:服务器有问题 → 一般用户无法解决,需要运维或开发介入。
- 304 不是错误,是缓存有效。
- 302 与 307:307 更严格,不会改变请求方法(例如 POST 重定向后仍然是 POST)。
- 403 比 401 更"绝",认证后也不行。