题目重点:解释常见 2xx/3xx/4xx/5xx,并把状态与幂等重试、权限和观测联系起来。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 状态码表达HTTP语义,具体业务错误用机器可读errorcode,不仅匹配英文消息。
解题路线
- 200成功、201创建、202接受但未完成、204无响应内容;3xx重定向/缓存相关语义需按具体码,304不是普通资源正文。
- 400请求错误、401需要认证、403拒绝权限、404未找到、409状态冲突、429过多请求。401与403不要混为一谈,也不能用404证明资源绝对不存在于所有用户视角。
- 500服务端异常、502网关收到无效上游响应、503暂不可服务、504网关超时;区分网关和应用有助于定位。
- 重试按方法和业务幂等、错误合同、Retry-After与总预算,不见5xx就无限重试。客户端超时或504后操作可能已成功,需查询或同key重试。
手动走一遍
POST支付遇504,不能再用新幂等键支付;先查询同请求状态。返回202的异步任务提供taskID/状态接口,不能让客户端把它当立即完成。
规模与取舍
重试放大请求量,采用退避/jitter、并发限额和deadline;监控按码、路由、请求ID与业务errorcode分解。
易错点与追问
容易失分的边界
- 202代表任务已完成。
- 401和403一样。
- 5xx保证没有副作用。
继续深挖
- 重定向方法保持与改写如何区分?
- 错误正文怎么设计兼容客户端?
技术参考
- HTTP Semantics:技术语义参考,具体题目按本文约定。
