HTTP 429 Too Many Requests: espera y luego reintenta bien

HTTP 429 Too Many Requests

HTTP 429 Too Many Requests: Retry-After y backoff | We.Inc

Qué significa un estado 429, cómo leer Retry-After y código de reintentos con backoff exponencial y jitter. Planifica tu propio calendario de reintentos con la calculadora.

Una respuesta 429 significa que el servidor te está aplicando rate limiting: este cliente envió más peticiones de las que permite en una ventana de tiempo. Deja de enviar durante un rato. Si la respuesta trae una cabecera Retry-After, espera ese tiempo; si no, reintenta con backoff exponencial más jitter aleatorio para que muchos clientes no reintenten al unísono.

Cómo leer una respuesta 429

Define el primer retraso, el tope y cuántos reintentos permites, y elige un tipo de jitter. La calculadora muestra el rango de espera de cada intento y el total en el peor caso, para que veas si tu cliente se rinde antes de que se reinicie la ventana del servidor.

Preguntas frecuentes

¿El 429 es un error del cliente o del servidor?

Pertenece a la clase 4xx, así que describe el comportamiento del cliente: demasiadas peticiones. No hay nada roto en el servidor. La solución es enviar menos peticiones o repartirlas.

¿Qué contiene Retry-After?

O un número de segundos de espera, como 120, o una fecha HTTP a partir de la cual puedes volver a intentarlo. Tu cliente debe manejar las dos formas.

¿Por qué añadir jitter al backoff exponencial?

Sin jitter, todos los clientes que fallaron en el mismo momento vuelven a reintentar en el mismo momento, lo que recrea el pico. Una espera aleatoria dentro de cada ventana reparte los reintentos.

¿Por qué mi rate limit de nginx devuelve 503 en lugar de 429?

El módulo limit_req rechaza con 503 salvo que lo cambies. Añade limit_req_status 429; junto a tu línea limit_req para que los clientes vean el código más preciso.

¿Una CDN puede cachear una respuesta 429?

No debe. El RFC 6585 dice que una caché no debe guardar las respuestas con el código de estado 429, para que cada cliente reciba una respuesta nueva cuando se levante el límite.

Quién envía un 429 y por qué

Los tres tipos de backoff de la calculadora

Código de cliente que respeta el 429

fetch con Retry-After y full jitter

Lee las dos formas de Retry-After, recurre al full jitter si no hay cabecera y se detiene tras un número fijo de reintentos.

Enviar un 429 desde tu propio servidor

nginx: limitar por IP y responder con 429

limit_req rechaza con 503 por defecto; limit_req_status lo cambia a 429.

Cómo es la respuesta

Un cuerpo breve que explica el límite y un Retry-After en segundos.

Calculadora de calendario de reintentos

Retraso base (ms)

Tope por espera (ms)

Reintentos

Tipo de jitter

Full jitter

Equal jitter

Sin jitter

Espera antes de cada reintento

Reintento

Espera más corta

Espera más larga

Peor caso antes de rendirse: {v}

Usa números enteros mayores que cero, con un tope al menos igual al retraso base.

Empieza gratis · Sin tarjeta de crédito

Relacionado: Guías

Producto

Para quién es

Funciones

Recursos

Empresa

Mapa del sitio