Sie debuggen einen API-Aufruf und Ihr HTTP-Client gibt 419 zurück. Sie prüfen das offizielle IANA-Register — es ist nicht dort. Sie suchen auf MDN — nichts. Was ist HTTP 419, und warum sendet Ihr Server es?
Die kurze Antwort
HTTP 419 ist kein offizieller HTTP-Statuscode. Er wurde in keiner RFC definiert oder bei IANA registriert. Es ist ein benutzerdefinierter Statuscode, der von bestimmten Frameworks verwendet wird — am bemerkenswertesten Laravel (PHP) — um anzugeben, dass ein CSRF-Token abgelaufen ist oder fehlt.
Wenn Sie 419 sehen, war Ihre Anfrage entweder:
- Hatte überhaupt kein CSRF-Token, oder
- Enthielt ein CSRF-Token, das abgelaufen ist (Laravel-Standard ist 120 Minuten), oder
- Das Sitzungscookie ging zwischen den Anfragen verloren
Woher HTTP 419 kommt
Laravel definiert diesen Statuscode in seinem Exception-Handler. Wenn eine POST-, PUT-, PATCH- oder DELETE-Anfrage einen von der VerifyCsrfToken-Middleware geschützten Endpunkt trifft und das Token ungültig ist, antwortet Laravel mit:
HTTP/1.1 419 Page Expired
Der Text “Page Expired” ist die Standard-Laravel-Grundphrase für 419. Er beschreibt nicht eine Seite — er beschreibt den Sitzungszustand, an den das CSRF-Token der Seite gebunden war.
Andere Frameworks, die 419 verwenden
Während Laravel die häufigste Quelle ist, haben einige andere PHP-Frameworks und benutzerdefinierte APIs 419 für ähnliche “Session/Token abgelaufen”-Semantik übernommen. Es ist eine De-facto-Konvention im PHP-Ökosystem, kein universeller Standard.
Wie Sie HTTP 419 beheben
Wenn Sie eine Laravel-App bauen
Für Browser-Formulare (traditionelles Rendering):
Die häufigste Ursache ist ein Sitzungs-Timeout. Der Benutzer öffnet ein Formularelement, geht zwei Stunden weg und übermittelt. Das CSRF-Token war gültig, als die Seite geladen wurde, aber die Sitzung ist seitdem abgelaufen.
Lösungen:
- Verlängern Sie die Sitzungsdauer in
config/session.php:
// Standard ist 120 Minuten
'lifetime' => 480, // 8 Stunden
- Fügen Sie clientseitige Token-Aktualisierung hinzu — bei Seitenaufruf senden Sie eine leichte AJAX-Anfrage, um ein neues CSRF-Token zu erhalten:
<meta name="csrf-token" content="{{ csrf_token() }}">
// Token alle 30 Minuten aktualisieren
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);
- Behandeln Sie 419 elegant auf dem Client — fangen Sie die 419-Antwort ab und leiten Sie zur Anmeldung um oder laden Sie die Seite neu:
fetch('/api/save', { method: 'POST', body: formData })
.then(response => {
if (response.status === 419) {
// Sitzung abgelaufen — neu laden, um frisches Token zu erhalten
window.location.reload();
}
return response.json();
});
Wenn Sie eine Laravel-API konsumieren
Wenn Sie eine Laravel-API von einer mobilen App, SPA oder einem externen Dienst aufrufen und 419 erhalten:
-
Überprüfen Sie Ihre Sitzungs/Cookie-Handhabung. Die API erwartet möglicherweise Sitzungscookies. Stellen Sie sicher, dass Ihr HTTP-Client Cookies sendet und empfängt.
-
Verwenden Sie tokenbasierte Authentifizierung stattdessen. Für API-Konsumenten haben Laravel Sanctum oder Laravel Passport Token nicht dasselbe CSRF-Ablaufproblem. Verwenden Sie
Authorization: Bearer <token>-Header statt Sitzungscookies. -
Authentifizieren Sie sich erneut. Wenn die Sitzung abgelaufen ist, ist die einzige Lösung sich erneut anzumelden und eine neue Sitzung zu erhalten.
Wenn Sie DevOps/Infrastruktur sind
Wenn Sie 419 in Ihren Load-Balancer- oder API-Gateway-Logs sehen:
- Prüfen Sie, ob das Backend Laravel ist. 419 ist fast immer Laravel-CSRF.
- Prüfen Sie die Sitzungsspeicherung. Wenn Redis oder der dateibasierte Sitzungsspeicher voll oder falsch konfiguriert ist, können Sitzungen vorzeitig ablaufen.
- Prüfen Sie die Uhrensynchronisation. Wenn Ihre Anwendungsserver falsch synchronisierte Uhren haben, können die Sitzungsablaufberechnungen falsch sein.
Wie Sie HTTP-Statuscodes prüfen
Wenn Sie API-Antworten debuggen und schnell nachschlagen müssen, was ein Statuscode bedeutet, können Sie ein Referenztool verwenden. Unsere HTTP-Statuscodes-Referenz enthält alle 63 offiziellen Codes mit Beschreibungen und Suche.
Verwandte Statuscodes
| Code | Bedeutung | Beziehung |
|---|---|---|
| 401 | Unauthorized | Fehlendes oder ungültiges Authentifizierungstoken |
| 403 | Forbidden | Authentifiziert, aber nicht berechtigt |
| 408 | Request Timeout | Server hat bei der Anfrage Zeitüberschreitung |
| 419 | Page Expired | CSRF-Token abgelaufen (Laravel-spezifisch) |
| 440 | Login Timeout | Eine andere Framework-spezifische Variante |
| 503 | Service Unavailable | Server ist offline oder überlastet |
Das Wichtigste
HTTP 419 ist Laravel, das Ihnen sagt: “Ihre Sitzung ist abgelaufen, ich kann dieser Anfrage nicht vertrauen.” Es ist kein Bug — es ist eine Sicherheitsfunktion, die wie vorgesehen funktioniert. Die Lösung ist entweder die Sitzungsdauer zu verlängern, Tokens clientseitig zu aktualisieren oder auf API-Token für programmatischen Zugriff umzusteigen.