HTTP 状态码与常用请求/响应头速查
快速查表:中文程序员调接口/排查必备。
一、HTTP 状态码速查(按分类)
1xx - 信息类(很少用到)
| 状态码 | 名称 | 含义 | 场景 |
|---|---|---|---|
| 100 | Continue | 客户端继续发送请求 | POST/PUT 前客户端发 Expect: 100-continue 头,服务器同意后才发 body;常见于大文件上传 |
| 101 | Switching Protocols | 切换协议 | 升级到 WebSocket(Upgrade: websocket)或 HTTP/2 |
2xx - 成功(一切正常)
| 状态码 | 名称 | 含义 | 场景 |
|---|---|---|---|
| 200 | OK | 请求成功,返回结果 | 标准 GET/POST/PUT/PATCH 响应 |
| 201 | Created | 资源创建成功 | POST 创建新资源时返回;应附带 Location 头指向新资源 URL |
| 204 | No Content | 请求成功但无返回内容 | DELETE 成功删除、PUT 成功更新但无需返回体,节省带宽 |
| 206 | Partial Content | 部分内容 | 返回分片数据;涉及 Range 请求头和 Content-Range 响应头;用于断点续传、视频进度条 |
3xx - 重定向(需要进一步操作)
| 状态码 | 名称 | 含义 | 场景 | 易混对比 |
|---|---|---|---|---|
| 301 | Moved Permanently | 永久重定向 | 资源永久移动到新地址;浏览器/客户端会记住,下次直接请求新地址;旧 URL 不再存在 | 301 vs 302:301 是永久(缓存),302 是临时(不缓存);301 vs 308:301 可能改 POST→GET,308 保持原方法 |
| 302 | Found | 临时重定向 | 资源暂时在其他地址;下次仍会请求原 URL;可能改变 POST→GET(不规范但常见) | 与 307 相似,但 307 保证方法不变 |
| 304 | Not Modified | 资源未修改 | 客户端发 If-None-Match / If-Modified-Since,服务器告诉"你的缓存版本还有效";不返回响应体,节省带宽 | 配套 ETag / Last-Modified 头 |
| 307 | Temporary Redirect | 临时重定向(方法不变) | 与 302 类似但保证 POST 仍为 POST(不改方法) | 307 更规范,但浏览器支持度不如 302;307 vs 308:307 临时,308 永久 |
| 308 | Permanent Redirect | 永久重定向(方法不变) | 与 301 类似但保证 POST 仍为 POST(不改方法) | 301 可能改 POST→GET,308 严格保持;最规范但支持度最低 |
3xx 易混总结:
- 永久 vs 临时:301/308(永久,可被缓存)vs 302/307(临时,每次重新请求)
- 方法保证:308/307 保证方法不变 vs 301/302 可能改 POST→GET
4xx - 客户端错误(你的请求有问题)
| 状态码 | 名称 | 含义 | 场景 | 易混对比 |
|---|---|---|---|---|
| 400 | Bad Request | 请求格式错误 | JSON 解析失败、必填字段缺失、参数类型错误等;排查:检查请求体格式、Content-Type 头 | 400 vs 422:400 是格式/语法错误,422 是语义错误(格式对但业务规则违反) |
| 401 | Unauthorized | 身份验证失败 | 缺少 Authorization 头、Token 过期、凭证无效;排查:检查 Token/Cookie、验证授权服务器 | 401 vs 403:401 是"你是谁?"(身份问题),403 是"你不能"(权限问题) |
| 403 | Forbidden | 禁止访问 | 身份有效但权限不足(如普通用户访问管理员接口);排查:检查用户角色/权限、资源访问策略 | 与 401 区别:已验证身份但被明确拒绝 |
| 404 | Not Found | 资源不存在 | URL 错误、资源被删除;排查:确认 URL 是否正确、检查路由配置 | |
| 405 | Method Not Allowed | 请求方法不支持 | 对 GET 专用接口发 POST;排查:检查接口文档、使用正确的 HTTP 方法 | |
| 409 | Conflict | 冲突 | 并发修改(如数据库版本冲突)、重复创建资源;排查:重试或检查资源当前状态 | 常见于分布式系统、乐观锁冲突 |
| 410 | Gone | 资源永久删除 | 与 404 类似但明确说明资源曾存在过,现已永久删除 | 410 vs 404:410 暗示资源曾有过,客户端不应继续请求 |
| 422 | Unprocessable Entity | 无法处理的实体 | 请求格式正确但业务规则违反(如邮箱已注册、年龄不符要求);排查:查看错误详情,修正业务数据 | 422 vs 400:422 是语义错(业务规则),400 是语法错 |
| 429 | Too Many Requests | 请求过于频繁 | 触发限流;排查:检查 Retry-After 头,等待后重试;需要实现指数退避 | 需要遵守服务器的限流策略 |
4xx 易混总结:
- 401 vs 403:前者是身份问题(无 Token/Token 无效),后者是权限问题(有身份但被拒)
- 400 vs 422:前者是格式/语法错,后者是业务规则错
- 404 vs 410:前者是"不存在",后者是"曾存在但现已删除"
5xx - 服务器错误(服务器出问题了)
| 状态码 | 名称 | 含义 | 场景 | 易混对比 |
|---|---|---|---|---|
| 500 | Internal Server Error | 服务器内部错误 | 代码崩溃、未捕获异常、逻辑 bug;排查:查看服务器日志、联系服务方 | 通用的"我也不知道啥错了"响应 |
| 502 | Bad Gateway | 网关错误 | 网关/代理(Nginx/LB)与上游服务器通信失败(无响应、连接重置、超时等);排查:检查上游服务健康状态、网络连接 | 502 vs 503 vs 504:502 是网关失败,503 是服务不可用,504 是网关超时 |
| 503 | Service Unavailable | 服务暂时不可用 | 服务器维护、过载、数据库挂掉;排查:稍后重试,查看 Retry-After 头;实现自动重试策略 | 通常是临时的(维护)或需要扩容 |
| 504 | Gateway Timeout | 网关超时 | 网关等待上游服务器响应超时(一般是上游慢或未响应);排查:检查上游服务是否卡住、网络延迟、超时配置 | 504 vs 502:504 是超时失败,502 是连接失败 |
5xx 易混总结:
- 502 vs 503 vs 504:
- 502:网关收不到上游响应(连接断、重置、无响应)
- 503:上游服务明确说自己不可用(维护、过载、降级)
- 504:网关等待上游太久超时了(上游慢或堵住了)
二、常用请求头速查
| 请求头 | 值示例 | 含义与作用 |
|---|---|---|
| Authorization | Bearer eyJhbGc... / Basic dXNlcjp... | 身份认证凭证;Bearer 用于 JWT/Token,Basic 用于用户名密码 Base64 编码 |
| Content-Type | application/json / multipart/form-data | 请求体格式;JSON/XML/表单/文件上传等 |
| Accept | application/json, text/html | 告诉服务器"我接受哪些格式";服务器应返回匹配的 Content-Type |
| User-Agent | Mozilla/5.0 (Windows NT 10.0; Win64; x64)... | 客户端身份标识(浏览器、爬虫、SDK);用于统计、反爬、适配 |
| Cookie | sessionid=abc123; token=xyz789 | 存储在客户端的会话数据;每次请求自动带上 |
| Referer | https://example.com/page | 请求来源页面 URL;用于反盗链、来源统计;跨域时受限 |
| Origin | https://example.com | 请求来源域;主要用于 CORS 预检,比 Referer 更严格 |
| If-None-Match | "33a64df551" | ETag 值;配套 304 Not Modified,用于缓存验证 |
| If-Modified-Since | Wed, 21 Oct 2024 07:28:00 GMT | 资源修改时间戳;配套 304 Not Modified,用于缓存验证 |
| Range | bytes=200-1023 / bytes=0- | 请求文件片段;用于断点续传、视频进度条;需配套 206 响应 |
| X-Requested-With | XMLHttpRequest | 告诉服务器这是 AJAX 请求;常用于防 CSRF |
| Cache-Control | max-age=3600 | 缓存控制指令;还可带 no-cache / no-store / must-revalidate |
| X-Forwarded-For | 203.0.113.45, 70.41.3.18 | 真实客户端 IP;由代理/网关添加,便于日志审计 |
| Connection | keep-alive / close | 连接管理;HTTP/1.1 默认 keep-alive,keep-alive 复用 TCP 连接 |
三、常用响应头速查
| 响应头 | 值示例 | 含义与作用 |
|---|---|---|
| Content-Type | application/json; charset=utf-8 | 响应体格式;告诉客户端如何解析(JSON/HTML/PDF 等) |
| Content-Length | 1234 | 响应体字节数;便于客户端知道何时读完 |
| Cache-Control | public, max-age=3600 / no-cache | 缓存策略;max-age 缓存秒数,no-cache 每次验证,no-store 禁用缓存 |
| ETag | "33a64df551427" | 资源版本标记;客户端下次用 If-None-Match 验证,服务器返回 304 |
| Last-Modified | Wed, 21 Oct 2024 07:28:00 GMT | 资源最后修改时间;客户端下次用 If-Modified-Since 验证 |
| Set-Cookie | sessionid=abc123; Path=/; HttpOnly; Secure | 设置浏览器 Cookie;后续自动在请求头中发送;HttpOnly 防 XSS,Secure 仅 HTTPS |
| Location | https://example.com/new-path | 重定向目标 URL;配套 301/302/307/308/3xx 状态码 |
| Access-Control-Allow-Origin | https://frontend.com / * | CORS 跨域:允许哪些源访问;* 允许所有源 |
| Access-Control-Allow-Methods | GET, POST, PUT, DELETE | CORS:允许哪些 HTTP 方法 |
| Access-Control-Allow-Headers | Content-Type, Authorization | CORS:允许哪些请求头 |
| Access-Control-Allow-Credentials | true | CORS:是否允许发送凭证(Cookie/认证);必须配套 Allow-Origin 不为 * |
| Content-Encoding | gzip / deflate / br | 响应体压缩方式;减小传输大小;客户端自动解压 |
| Content-Range | bytes 200-1023/2048 | 分片响应范围;配套 206 状态码,用于断点续传 |
| Retry-After | 120 / Wed, 21 Oct 2024 07:28:00 GMT | 重试等待时间(秒数或时间戳);配套 429/503 状态码 |
| X-RateLimit-Limit | 100 | 限流配额:该时间窗口内允许请求数 |
| X-RateLimit-Remaining | 42 | 限流配额:剩余可用请求数 |
| X-RateLimit-Reset | 1635060480 | 限流配额:重置时间戳(Unix 时间) |
| Server | nginx/1.21.0 | 服务器软件标识;用于漏洞扫描、版本识别 |
| Strict-Transport-Security | max-age=31536000; includeSubDomains | HSTS:强制 HTTPS;浏览器会记住,后续自动升级为 HTTPS |
四、排查场景 → 优先查看
| 排查场景 | 优先检查的状态码/头 | 检查步骤 |
|---|---|---|
| 前端访问被拒 | 401 / 403 | 1. 看是 401(检查 Token/Cookie)还是 403(检查权限)2. 查 Authorization 请求头 3. 看是否过期/无效 |
| 跨域报错 | 无法看到响应体(CORS 预检失败) | 1. 看 Network 有无 OPTIONS 预检请求 2. 检查 Access-Control-Allow-Origin / Allow-Methods / Allow-Headers 3. 若发送凭证需 Credentials=true 且 Origin 不能为 * |
| 请求被拒 | 400 / 422 / 405 | 1. 400:检查 JSON 格式、必填字段、Content-Type 2. 422:检查业务规则(重复、数据不符)3. 405:检查 HTTP 方法(GET/POST/PUT 等)是否匹配 |
| 请求超时/无响应 | 504 / 502 / 请求挂起 | 1. 504:网关超时,上游服务慢;增加超时时间 2. 502:网关失败,上游服务下线;联系后端 3. 无响应:检查网络、防火墙、DNS |
| 服务故障/维护 | 503 / 500 | 1. 503:查 Retry-After 头,稍后重试 2. 500:查服务器日志,告知后端 |
| 资源未更新(缓存问题) | 304 | 1. 看请求有无 If-None-Match / If-Modified-Since 头 2. 响应有无 ETag / Last-Modified 头 3. 刷新时加 Cache-Control: no-cache 强制验证 |
| 限流被封 | 429 | 1. 查 X-RateLimit-* 头了解配额 2. 查 Retry-After 头等待多久 3. 实现指数退避重试策略 |
| 文件下载中断 | 206 / Content-Range | 1. 检查请求有无 Range 头 2. 响应有无 Content-Range 和分片大小 3. 实现断点续传逻辑 |
| 重定向死循环/过多 | 301 / 302 / 307 / 308 | 1. 追踪 Location 头是否形成闭环 2. 检查重定向深度(不超过 5 级) 3. 看浏览器控制台的重定向链 |
五、速记技巧
记忆 3xx(重定向)
- 301/302 按时间:301 永久 / 302 临时
- 307/308 按方法:307/308 保证方法(如 POST 仍为 POST);301/302 可能改 POST→GET
- 304 Not Modified:缓存有效,省流量
记忆 4xx(客户端错)
- 401 vs 403:401 是"我是谁?"(验证失败),403 是"我不给"(权限不足)
- 400 vs 422:400 格式错(JSON 坏了),422 业务错(规则违反)
- 404 vs 410:404 "找不到",410 "曾有过但删了"
记忆 5xx(服务器错)
- 502 vs 503 vs 504:502 网关失败 / 503 服务不可用 / 504 网关超时
- 502:网关与上游"连不了"
- 503:上游明确说"我不行"(维护/过载)
- 504:网关"等得太久"(上游太慢)
CORS(跨域)快速检查
预检请求失败 → 看浏览器 Console 和 Network 的 OPTIONS 请求
→ 检查响应头 Access-Control-Allow-Origin 是否匹配
→ 检查 Allow-Methods/Allow-Headers 是否包含你用的方法/头
→ 若发送 Cookie 需 Credentials=true 且 Origin 不能为 *
缓存验证快速检查
304 Not Modified 出现 → 检查请求头有无 If-None-Match/If-Modified-Since
→ 检查响应头有无 ETag/Last-Modified
→ 强制刷新:加 Cache-Control: no-cache(验证)或 no-store(禁缓存)
六、常见错误处理示例
网络错误排查流程
请求失败
├─ 无响应 / 超时 → 504/连接问题
│ └─ 检查:上游服务、网络延迟、DNS 解析
├─ 返回 502 → 网关无法连接上游
│ └─ 检查:上游服务是否启动、网络是否通
├─ 返回 503 → 服务不可用(维护/过载)
│ └─ 等待 Retry-After 后重试
└─ 返回 500 → 服务器代码崩溃
└─ 查后端日志,修复 bug
认证/授权排查流程
请求被拒
├─ 返回 401 → 身份验证失败
│ ├─ 无 Authorization 头 → 补充 Token
│ ├─ Token 过期 → 刷新 Token
│ └─ Token 无效 → 重新登录
├─ 返回 403 → 权限不足
│ ├─ 检查用户角色
│ ├─ 检查资源权限策略
│ └─ 申请提权或联系管理员
└─ 返回 400/422 → 请求参数错
├─ 检查 JSON 格式、必填字段
└─ 查错误详情信息
限流/重试策略
遇到 429 → 触发限流
├─ 读 Retry-After 头(等待秒数或时间戳)
├─ 读 X-RateLimit-Reset(配额重置时间)
└─ 实现指数退避重试(延迟 1s → 2s → 4s → 8s)
最后更新:2026-07-12 用途:快速参考、调试排查、面试准备