自动重试请求的 http 代码是啥?
Posted
技术标签:
【中文标题】自动重试请求的 http 代码是啥?【英文标题】:What are the http codes to automatically retry the request?自动重试请求的 http 代码是什么? 【发布时间】:2019-01-17 02:22:50 【问题描述】:我正在使用混合 Spring-Cloud + feign + spring-retry 来帮助在客户端重试请求(都是基于 Kotlin 的后端)
我的 spring-boot conf 是这样的:
myApp:
ribbon:
OkToRetryOnAllOperations: true
retryableStatusCodes: 404, 503
(注意:OkToRetryOnAllOperations=true 仅用于重试 POST/PUT 请求)
重试 404 和 503 HTTP 代码听起来不错,但我无法确定是否有要重试的“经典”或“默认”错误代码列表。 这种好的做法是否存在?
我们假设所有请求在服务器端都是幂等的(如果不是,重试可能会导致问题)。
【问题讨论】:
这些代码也可能与重试请求相关:408、500、502、504 ? 【参考方案1】:作为一个非常粗略的经验法则: 4XX - 客户做了坏事 5XX - 服务器做了坏事
但这在很大程度上取决于实际的 API。 你应该重试500吗?也许是因为服务器在连接到数据库时出现了意外的问题。或者,也许你正在向它发送它不期望的东西,而不是返回 4XX 它崩溃了。
通常没有太多理由重试 404,除非您预计该资源会出现。
唯一对重试有效的 HTTP 代码是 408、502、503 和 504
【讨论】:
感谢您的回复。我认为 404 在客户端出现网络问题的情况下是相关的,你不觉得吗? 不,因为这些是服务器返回的错误。你得到 404 的事实意味着你设法到达服务器。 你说得对,如果资源不存在,重试就不可能出现...谢谢! 429s 也可以重试。 只有在知道等待什么的情况下才重试 429。您正在创建过度的负载,并且您的重试可能会不断耗尽速率限制配额。以上是关于自动重试请求的 http 代码是啥?的主要内容,如果未能解决你的问题,请参考以下文章
使用 jQuery 在失败时重试 AJAX 请求的最佳方法是啥?
Angular 7 - 如何在某些响应状态代码上重试 http 请求?
Alamofire/RxSwift 如何在状态码 401 上自动刷新令牌和重试请求