据我了解,当邮件无法传递时,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秒开始?
答案 0 :(得分:2)
AFAIK,指数退避并不是一种标准的方式或间隔。
然而,通常遵循的是,对于每个连续的不成功请求,等待间隔应该比前一个更长,但如果它是第一个错误响应(例如,先前的请求成功),它应该恢复为默认值值(您设置的值,例如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)
还有一些行为不需要精确的间隔,有些行为会随机增加一个值。
您应该看看以下内容: