Ingegneria · 11 settembre 2026

Codice di stato HTTP 419 — cosa significa e come risolverlo

Il codice di stato HTTP 419 non è un codice IANA ufficiale. Ecco da dove viene, perché lo stai vedendo e come risolverlo nella tua applicazione.

Stai facendo debug di una chiamata API e il tuo client HTTP restituisce 419. Controlli il registro ufficiale IANA — non c’è. Cerchi su MDN — niente. Cos’è l’HTTP 419 e perché il tuo server lo sta inviando?

La risposta breve

HTTP 419 non è un codice di stato HTTP ufficiale. Non è mai stato definito in alcuna RFC né registrato presso IANA. È un codice di stato personalizzato usato da framework specifici — in particolare Laravel (PHP) — per indicare che un token CSRF è scaduto o mancante.

Se stai vedendo 419, la tua richiesta:

  1. Non includeva affatto un token CSRF, oppure
  2. Includeva un token CSRF scaduto (il predefinito di Laravel è 120 minuti), oppure
  3. Il cookie di sessione è andato perso tra le richieste

Da dove viene HTTP 419

Laravel definisce questo codice di stato nel suo exception handler. Quando una richiesta POST, PUT, PATCH o DELETE raggiunge una rotta protetta dal middleware VerifyCsrfToken e il token non è valido, Laravel risponde con:

HTTP/1.1 419 Page Expired

Il testo “Page Expired” è la frase di ragione predefinita di Laravel per 419. Non sta descrivendo una pagina — sta descrivendo lo stato della sessione a cui il token CSRF della pagina era legato.

Come risolvere HTTP 419

Se stai costruendo un’app Laravel

Per i form del browser (rendering tradizionale):

La causa più comune è un timeout della sessione. L’utente apre un form, si allontana per due ore e invia. Il token CSRF era valido quando la pagina si è caricata ma la sessione è scaduta da allora.

Soluzioni:

  1. Estendi la durata della sessione in config/session.php:
// Il predefinito è 120 minuti
'lifetime' => 480, // 8 ore
  1. Aggiungi l’aggiornamento del token lato client — al caricamento della pagina, fai una richiesta AJAX leggera per ottenere un token CSRF fresco:
<meta name="csrf-token" content="{{ csrf_token() }}">
// Aggiorna il token ogni 30 minuti
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. Gestisci 419 con grazia lato client — cattura la risposta 419 e reindirizza al login o ricarica la pagina:
fetch('/api/save', { method: 'POST', body: formData })
  .then(response => {
    if (response.status === 419) {
      // Sessione scaduta — ricarica per ottenere token fresco
      window.location.reload();
    }
    return response.json();
  });

Se stai consumando un’API Laravel

Se stai chiamando un’API Laravel da un’app mobile, SPA o servizio esterno e ricevi 419:

  1. Controlla la gestione della sessione/cookie. L’API potrebbe aspettare cookie di sessione. Assicurati che il tuo client HTTP invii e riceva cookie.

  2. Usa l’autenticazione basata su token invece. Per i consumatori di API, i token di Laravel Sanctum o Laravel Passport non hanno lo stesso problema di scadenza del CSRF. Usa le intestazioni Authorization: Bearer <token> invece dei cookie di sessione.

  3. Riautenticati. Se la sessione è scaduta, l’unica soluzione è accedere di nuovo e ottenere una sessione fresca.

Se sei DevOps / infrastruttura

Se stai vedendo 419 nei log del tuo load balancer o API gateway:

  1. Controlla se il backend è Laravel. 419 è quasi sempre CSRF di Laravel.
  2. Controlla l’archivio della sessione. Se Redis o l’archivio sessioni basato su file è pieno o mal configurato, le sessioni potrebbero scadere prematuramente.
  3. Controlla la sincronizzazione degli orologi. Se i tuoi server applicativi hanno orologi sfalsati, i calcoli di scadenza della sessione potrebbero essere errati.

Come controllare i codici di stato HTTP

Se stai facendo debug delle risposte API e devi cercare rapidamente cosa significa un codice di stato, puoi usare uno strumento di riferimento. Il nostro riferimento codici di stato HTTP ha tutti i 63 codici ufficiali con descrizioni e ricerca.

Codici di stato correlati | Codice | Significato | Relazione | |––––|———––|———–| | 401 | Non autorizzato | Token di autenticazione mancante o non valido | | 403 | Vietato | Autenticato ma non autorizzato | | 408 | Timeout della richiesta | Il server è andato in timeout aspettando la richiesta | | 419 | Pagina scaduta | Token CSRF scaduto (specifico di Laravel) | | 440 | Timeout di login | Altra variante specifica del framework | | 503 | Servizio non disponibile | Il server è giù o sovraccarico |

In sintesi

HTTP 419 è Laravel che ti dice “la tua sessione è scaduta, non posso fidarmi di questa richiesta”. Non è un bug — è una funzionalità di sicurezza che funziona come progettato. La soluzione è estendere la durata della sessione, aggiornare i token lato client o passare ai token API per l’accesso programmatico.