4xx 是什么
4xx 表示错误来自请求方:语法错误、认证或权限不足、资源不存在、条件不满足、请求过大、触发限流。它的共同含义是「服务器看懂了但拒绝或无法处理当前这个请求」,因此盲目重试通常没有意义,先修请求才是正解。但要注意两个例外:请求超时与触发限流这两类在退避之后是可以重试的,把它们和权限、路径类的错误一概而论,会做出错误的处置。
基本信息
| 范围 | 以四开头的状态码 |
|---|---|
| 含义 | 错误来自请求方,或请求与当前资源状态不匹配 |
| 常见码 | 语法错误、未认证、拒绝访问、未找到、方法不允许、限流 |
| 是否可重试 | 多数不可,超时类与限流类可在退避后重试 |
| 归因方向 | 先看请求构造,再看权限与资源状态 |
典型使用场景
- 接口联调:构造错误参数,确认服务端给出精确的错误说明
- 权限排障:区分未认证与拒绝访问,避免让用户反复登录
- 限流应对:识别限流响应并按提示退避
- 版本兼容:收到方法不允许时核对接口文档允许的方法
- 条件请求失败:并发写入被拒绝后需重新读取最新版本再提交
看错误详情而不是只看状态码
看错误详情而不是只看状态码
curl -si https://api.example.com/items/999 | head -20 # 连响应头与响应体一起看
curl -si https://api.example.com/items | grep -i '^allow' # 方法不允许时看允许哪些方法
curl -si -H 'Authorization: Bearer bad' https://api.example.com/me | grep -i '^www-authenticate' # 未认证时看服务端要求的方案高频四类归因速查
| 状态码 | 第一优先排查点 |
|---|---|
| 请求语法错误 | 请求体格式、必填参数、非法字符 |
| 未认证 | 凭证缺失或过期,看服务端声明的认证方案 |
| 拒绝访问 | 权限不足,也可能是来源限制或安全策略拦截 |
| 未找到 | 地址拼写、路由是否注册、后端版本是否一致 |
| 方法不允许 | 请求方法不对,看允许方法头部 |
| 触发限流 | 按提示等待,并核对多层限流阈值 |
排查要点
- 响应体里的机器可读错误标识比状态码更有价值,先读它再读日志
- 同一批请求里只有部分失败时,对比成功与失败请求的差异字段
- 若错误发生在网关层,应用日志里不会有任何记录,先确认请求是否到达应用
这一类别不等于「不能重试」:请求超时与触发限流在退避后重试是合理的;而权限不足、资源不存在这类错误无论重试多少次结果都一样,只会把日志与告警刷满。
把服务端内部异常也返回这一类状态码,会把责任错误地推给调用方:调用方按「修请求」的思路排查,而真正的问题在服务端,故障被拖延到更久才被发现。