1

据我了解,当消息无法传递时,Retry-After 标头有时包含在响应中,有时不包含。但是,如果我首先收到包含 Retry-After 的错误响应,然后重新发送消息并收到另一个错误响应但没有 Retry-After,会发生什么?我知道我应该使用指数退避,但是当之前的等待时间来自 Retry-After 标头时,它是如何工作的?

想象一下这个请求和响应序列:

Request 1: No waiting
Response 1: Error without Retry-After
Request 2: Wait 2 seconds
Response 2: Error with Retry-After included (let's say 120 seconds)
Request 3: Wait 120 seconds
Response 3: Error without Retry-After
Request 4: How long should I wait? 

在发送请求 4 之前我应该​​等待多长时间?8 秒?还是从 2 秒开始?

4

1 回答 1

2

AFAIK,没有真正的指数退避的标准方式或间隔。

但是,通常遵循的是,对于每一个连续不成功的请求,等待间隔应该比前一个长,但如果是第一个错误响应(例如前一个请求成功),它应该恢复到默认值(a您设置的值,例如 2 秒)。

一个例子是这样的。

Request 1: No waiting
Response 1: Error without Retry-After
Request 2: Wait 2 seconds // assume 2seconds is your default
Response 2: Error with Retry-After included (let's say 120 seconds)
Request 3: Wait 120 seconds
Response 3: Error without Retry-After
Request 4: 180 // you use the previous value of 120 x 1.5 (sample value increment)
Request 5: ...
Response 5: Success!
Request 6: 1 second (assume default waiting interval per success response)
Response 6: Error without Retry-After included
Request 7: Wait 2 seconds (using the default)

还有一些行为不需要精确的间隔,有些行为会为增量混合随机值。

你应该看看以下内容:

于 2017-06-11T05:50:28.817 回答