Ingeniería · 11 de septiembre de 2026

Código de estado HTTP 419 — qué significa y cómo solucionarlo

El código de estado HTTP 419 no es un código IANA oficial. Aquí viene de dónde, por qué lo estás viendo, y cómo resolverlo en tu aplicación.

Estás depurando una llamada a una API y tu cliente HTTP devuelve 419. Verificas el registro oficial de IANA — no está allí. Buscas en MDN — nada. ¿Qué es HTTP 419, y por qué tu servidor lo está enviando?

La respuesta corta

HTTP 419 no es un código de estado HTTP oficial. Nunca se definió en ninguna RFC ni se registró en IANA. Es un código de estado personalizado usado por marcos de trabajo específicos — más notablemente Laravel (PHP) — para indicar que un token CSRF ha expirado o falta.

Si estás viendo 419, tu solicitud ya sea:

  1. No incluyó un token CSRF en absoluto, o
  2. Incluyó un token CSRF que ha expirado (el valor predeterminado de Laravel es 120 minutos), o
  3. La cookie de sesión se perdió entre solicitudes

De dónde viene HTTP 419

Laravel define este código de estado en su manejador de excepciones. Cuando una solicitud POST, PUT, PATCH o DELETE llega a una ruta protegida por el middleware VerifyCsrfToken y el token no es válido, Laravel responde con:

HTTP/1.1 419 Page Expired

El texto “Page Expired” es la frase de razón predeterminada de Laravel para 419. No está describiendo una página — está describiendo el estado de sesión al que estaba vinculado el token CSRF de la página.

Otros marcos de trabajo que usan 419

Si bien Laravel es la fuente más común, algunos otros marcos de trabajo PHP y APIs personalizadas han adoptado 419 para semántica similar de “sesión/token expirado”. Es una convención de facto en el ecosistema PHP, no un estándar universal.

Cómo solucionar HTTP 419

Si estás construyendo una aplicación Laravel

Para formularios de navegador (renderizado tradicional):

La causa más común es un tiempo de espera de sesión. El usuario abre un formulario, se aleja por dos horas y envía. El token CSRF era válido cuando se cargó la página pero la sesión ha expirado desde entonces.

Soluciones:

  1. Extiende el tiempo de vida de la sesión en config/session.php:
// El valor predeterminado es 120 minutos
'lifetime' => 480, // 8 horas
  1. Añade actualización del token del lado del cliente — al cargar la página, haz una solicitud AJAX ligera para obtener un token CSRF fresco:
<meta name="csrf-token" content="{{ csrf_token() }}">
// Actualizar el token cada 30 minutos
setInterval(() => {
  fetch('/api/csrf-token', {
    headers: { 'X-Requested-With': 'XMLHttpRequest' }
  }).then(r => r.json()).then(data => {
    document.querySelector('meta[name="csrf-token"]').content = data.token;
  });
}, 30 * 60 * 1000);
  1. Maneja 419 elegantemente en el cliente — captura la respuesta 419 y redirige al inicio de sesión o recarga la página:
fetch('/api/save', { method: 'POST', body: formData })
  .then(response => {
    if (response.status === 419) {
      // Sesión expirada — recargar para obtener token fresco
      window.location.reload();
    }
    return response.json();
  });

Si estás consumiendo una API de Laravel

Si estás llamando a una API de Laravel desde una aplicación móvil, SPA o servicio externo y recibes 419:

  1. Verifica tu manejo de sesión/cookie. La API podría esperar cookies de sesión. Asegúrate de que tu cliente HTTP envíe y reciba cookies.

  2. Usa autenticación basada en token en su lugar. Para consumidores de API, los tokens de Laravel Sanctum o Laravel Passport no tienen el mismo problema de expiración de CSRF. Usa encabezados Authorization: Bearer <token> en lugar de cookies de sesión.

  3. Re-autentícate. Si la sesión expiró, la única solución es iniciar sesión de nuevo y obtener una sesión fresca.

Si eres una persona de DevOps / infraestructura

Si estás viendo 419 en los registros de tu balanceador de carga o puerta de enlace de API:

  1. Verifica si el backend es Laravel. 419 casi siempre es CSRF de Laravel.
  2. Verifica el almacenamiento de sesión. Si Redis o el almacén de sesiones basado en archivos está lleno o mal configurado, las sesiones pueden expirar prematuramente.
  3. Verifica la sincronización de reloj. Si los servidores de tu aplicación tienen relojes desincronizados, los cálculos de expiración de sesión pueden estar desfasados.

Cómo verificar códigos de estado HTTP

Si estás depurando respuestas de API y necesitas buscar rápidamente qué significa un código de estado, puedes usar una herramienta de referencia. Nuestra referencia de códigos de estado HTTP tiene los 63 códigos oficiales con descripciones y búsqueda.

Códigos de estado relacionados

Código Significado Relación
401 No autorizado Token de autenticación faltante o inválido
403 Prohibido Autenticado pero no permitido
408 Tiempo de espera de solicitud El servidor agotó el tiempo esperando la solicitud
419 Página expirada Token CSRF expirado (específico de Laravel)
440 Tiempo de espera de inicio de sesión Otra variante específica de marco de trabajo
503 Servicio no disponible El servidor está caído o sobrecargado

El fondo del asunto

HTTP 419 es Laravel diciéndote “tu sesión expiró, no puedo confiar en esta solicitud”. No es un error — es una característica de seguridad funcionando como fue diseñada. La solución es extender el tiempo de vida de la sesión, actualizar tokens del lado del cliente o cambiar a tokens de API para acceso programático.