开发实战指南
HTTP 错误与重试:401、403、429 和 5xx
结合上下文解读状态码,避免盲目重试不具幂等性的操作。
区分传输与 HTTP 错误
HTTP 状态说明已收到 HTTP 响应,DNS、TLS 和连接失败可能发生在此前,根本没有状态码。
fetch 对 4xx、5xx 通常仍返回响应,应检查 response.ok 或 status,Promise 拒绝本身无法分类 HTTP 错误。
结合语义看认证失败
401 涉及认证并通常带挑战信息,403 表示拒绝请求,重复相同凭据不会自动解决。
需检查 API 错误体和认证方案,服务也可能用 404 隐藏资源存在,单个状态码不能透露全部策略。
遵守限流提示
429 表示触发服务的请求限制,提供的 Retry-After 可以是等待秒数或 HTTP 日期。
适合重试的失败采用有界退避和抖动,达到次数或时间预算后停止,不能无限重试。
HTTP/1.1 429 Too Many Requests
Retry-After: 60保护产生副作用的请求
超时或 5xx 可能发生在操作已执行之后,重复类似支付的 POST 可能产生重复副作用。
应采用 API 文档规定的幂等机制和请求 ID,状态码工具解释含义,但不能决定业务操作是否适合重试。