浏览 AI 知识库

API 返回 401、403、404、429、500,先查客户端还是上游

401、403、404、429 和 500 指向的故障层不同。保留原请求和响应,一次只检查认证、权限、路径、限流或服务端中的一层,比不断换 Key 更快。

先认准故障

看到 API 报错先别重写代码,先判断是谁拒绝了请求

接口返回 403,开发者连续更换 API Key、重写请求并重启服务。最后发现 Token 有效,但当前账号没有目标项目权限。

  • 完整状态、响应和 requestId 已保留
  • 一次只验证一个层级
  • 修复后用原请求复测
按现象分支

API 错误码排查,先从“401 / 403”这一类现象查起

401 / 403

原因
认证缺失或失效,或身份有效但无资源、动作或网络权限。
怎么改
核对令牌类型、过期、scope、用户/组织/资源和服务端授权日志;区分未认证与已认证无权。

404

原因
路径、版本、资源 ID、反向代理或权限隐藏可能导致未找到。
怎么改
从最小端点逐段核对 host、base path、路由和资源存在性,检查上游实际收到的路径。

429

原因
请求、并发、令牌、账号配额或上游池限流。
怎么改
读取响应头和文档,记录时间窗与请求 ID,按规则退避;不要无上限并发重试。

500 / 502 / 503 / 504

原因
应用异常、代理上游、依赖不可用或超时边界。
怎么改
关联同一请求在代理、应用和上游的时间线,找第一处失败和完整错误,不以最后状态码代替根因。
本例材料

复测前,固定原始现象、环境和目标

需要确认本例内容
现有材料请求时间 14:32、requestId `a91c`、状态 403、响应含 `insufficient_scope`;同 Token 可访问 `/me`。
不能越过的边界按客户端、认证、授权、资源、限流、服务端分层;保留完整响应和时间线;不在日志中暴露 Token。
要交付的结果分层诊断记录
一次 502 的完整现场

浏览器只看到 502,第一处失败其实是应用访问上游超时

时间层级证据能得出的结论
10:42:18.091客户端POST /api/report,x-request-id=req-6a21请求已到本站,保留同一关联 ID
10:42:18.106反向代理转发 app:3000,连接成功不是代理找不到应用
10:42:18.121应用调用 reports-upstream.example.test进入外部依赖阶段
10:42:23.123应用upstream timeout after 5000 ms第一处明确失败
10:42:23.125反向代理502,upstream_response_time=5.004502 是结果,不是根因

域名、时间和请求 ID为教学构造。真实排查必须统一时区,并从客户端、代理、应用和上游保留同一请求的原始记录。

修复前后

API 错误码排查:按原条件复测的结果

Before

原始现象

只看到“请求失败”,每次同时改 Key、URL 和代码,无法知道哪个条件起作用。

After

分层诊断记录

诊断确认认证成功、资源存在,失败位于授权 scope;申请只读项目 scope 后同一请求返回 200。记录同时说明 401、404、429、500 的不同证据入口,没有把所有错误归因于 Key。

验收方式

分层诊断记录通过哪些检查才算完成

进一步核对

后端与数据:参考资料与核对入口