408 Request Timeout: cuando el cliente es demasiado lento

408 Request Timeout significa que el servidor dejó de esperar a que el cliente terminara de enviar su solicitud y cerró la conexión.

Comprueba el código de estado de una URL

408 Request Timeout significa que el servidor dejó de esperar a que el cliente terminara de enviar su solicitud. Se refiere a que la solicitud entrante es demasiado lenta, no a que el servidor tarde en responder, que es lo que describen el 504 y el 524 de Cloudflare.

Definición

La RFC 9110, sección 15.5.9 dice que el servidor “no recibió un mensaje de solicitud completo dentro del tiempo que estaba dispuesto a esperar”. El cliente puede repetir la solicitud. Si la conexión no se puede reutilizar, el servidor debería cerrarla, por lo que las respuestas 408 suelen llevar Connection: close.

Causas habituales

  • Conexiones inactivas. Los navegadores abren conexiones por adelantado y a veces no las usan nunca. Cuando el servidor cierra una de esas conexiones al agotarse su tiempo de espera, puede registrar o enviar un 408 que ningún visitante llega a ver.
  • Subidas lentas en redes móviles o inestables que superan el timeout del cuerpo del servidor.
  • Timeouts agresivos configurados para frenar ataques de solicitudes lentas.
  • Un servidor sobrecargado que no puede leer las solicitudes con la suficiente rapidez.

Impacto en el SEO

Las solicitudes de Googlebot son GET pequeños que se envían rápido, así que rara vez debería provocar un 408. Si lo hace, tómatelo en serio: la documentación de Google sobre códigos de estado gestiona igual todos los códigos 4xx distintos del 429, de modo que las URL que siguen devolviendo 408 pueden salir del índice. Revisa en el informe Estadísticas de rastreo de Search Console si hay picos y busca problemas de red entre los rastreadores y tu servidor.

Cómo solucionarlo

Muchas entradas 408 en los registros son ruido inofensivo de conexiones sin usar. Para los fallos reales, ajusta los timeouts a tu tráfico:

# Nginx (ambos valen 60s por defecto)
client_header_timeout 30s;
client_body_timeout   120s;   # permite subidas lentas

# Apache (mod_reqtimeout)
RequestReadTimeout header=20-40,MinRate=500 body=60,MinRate=500

Para subidas grandes, plantéate subidas reanudables o por fragmentos, de modo que una sola conexión lenta no haga fallar toda la transferencia. Si las subidas fallan por su tamaño y no por su velocidad, el servidor responde 413.

Cómo comprobarlo

Pasa la URL por el comprobador de códigos de estado HTTP. Una página que devuelve 408 ante una solicitud rápida y sencilla apunta a un problema del servidor y no a un cliente lento, y el tiempo de respuesta que se indica ayuda a detectar un servidor sobrecargado.

HTTP/1.1 408 Request Timeout
Connection: close
Content-Type: text/html
Content-Length: 221

Preguntas frecuentes

¿Cuál es la diferencia entre 408 y 504?

El 408 significa que el cliente tardó demasiado en enviar su solicitud al servidor. El 504 significa que un proxy o una pasarela esperó demasiado la respuesta del servidor que tiene detrás.

¿Por qué mis registros muestran muchos errores 408?

A menudo proceden de conexiones que los navegadores abrieron por adelantado y no usaron; el servidor las cierra al agotarse su tiempo de espera y registra un 408. Si los usuarios reales no se ven afectados, suelen ser inofensivos.

¿Puede el cliente reintentar tras un 408?

Sí. La RFC 9110 dice que el cliente puede repetir la solicitud, normalmente en una conexión nueva.