基于HTTP状态码,哪些API失败请求不应触发重试机制?
哪些API失败请求不应重试?
以下几类请求完全没有重试的必要,甚至重试可能会引发问题,需要在拦截器中排除:
1. 成功响应(2xx系列状态码)
所有以2开头的HTTP状态码都代表请求已被服务器成功处理,且返回了有效数据(包括204 No Content这类无返回体的情况),重试这类请求纯粹是浪费资源。
2. 客户端错误(4xx系列)中明确不可重试的状态码
这类错误是客户端请求本身存在问题,重试相同请求只会得到相同结果:
400 Bad Request:请求参数非法、语法错误等,除非修改请求内容,否则重试无效401 Unauthorized:身份验证失败,需先获取有效凭证再发起请求,重试无凭证的请求没用403 Forbidden:权限不足,服务器明确拒绝访问,重试无法改变权限状态404 Not Found:请求的资源不存在,相同URL重试不会让资源出现405 Method Not Allowed:使用了服务器不支持的HTTP方法(比如POST请求GET接口),需修改请求方法而非重试409 Conflict:请求与服务器资源状态冲突(如并发修改版本冲突),需先解决冲突再操作410 Gone:请求的资源已永久删除,重试无意义
3. 部分服务器错误(5xx系列)状态码
不是所有5xx都适合重试,以下几种重试也无法解决问题:
501 Not Implemented:服务器不支持该请求功能,需更换接口或请求方式505 HTTP Version Not Supported:服务器不支持当前HTTP版本,需调整版本后再请求
4. 非幂等性请求
对于非幂等的请求(比如创建资源的POST请求),重试可能会导致重复操作(比如重复创建订单、重复扣款),除非业务层做了幂等校验(比如携带唯一请求ID),否则绝对不能重试。
5. 已确认执行成功的超时请求
如果客户端超时,但能通过其他渠道确认服务器已经处理完成(比如支付请求超时,但后续查询到扣款成功),此时重试会引发重复操作,也不能重试。
内容的提问来源于stack exchange,提问作者Nipuna Jayawardana
相关产品推荐
相关产品推荐

