HTTP-Statusmeldungen
Eine übersichtliche Referenz zu HTTP-Statuscodes (1xx–5xx) mit Erklärungen der häufigsten Codes und einem fetch()-Beispiel mit Statusverzweigung.
Jedes Mal, wenn ein Browser eine Seite lädt, ein Formular abschickt oder Ihr JavaScript einen fetch()-Aufruf macht, antwortet der Server mit einem dreistelligen HTTP-Statuscode. Dieser Code teilt dem Client mit, ob die Anfrage erfolgreich war, umgeleitet wurde, aufgrund eines Clientfehlers fehlgeschlagen ist oder auf der Serverseite fehlgeschlagen ist. Der Browser verwendet ihn automatisch — er folgt Weiterleitungen, zeigt bei bestimmten Codes eine eigene Fehlerseite an und verwendet bei anderen gecachte Inhalte wieder — aber als Entwickler lesen Sie diese Codes auch direkt: Ein Formular wird abgeschickt und Sie verzweigen auf die Antwort, oder ein fetch() wird aufgelöst und Sie prüfen response.ok (was einfach „Status im Bereich 200–299" bedeutet).
Hier finden Sie die Liste der Hypertext Transfer Protocol (HTTP)-Antwortstatuscodes. Diese Codes beantworten die Anfrage, die ein Client an einen Server stellt — unabhängig davon, ob diese Anfrage GET, POST oder eine andere HTTP-Methode verwendet — und sie werden anhand ihrer ersten Ziffer in 5 Klassen eingeteilt. Wenn Sie sie kennen, können Sie fehlerhafte Links, falsche URLs, fehlgeschlagene Formularübermittlungen und unerwartete API-Antworten besser debuggen. Gehen wir jede Klasse durch:
Wenn Sie eine Antwort erhalten, die nicht in dieser Liste enthalten ist, bedeutet dies, dass es sich um eine nicht standardisierte Antwort handelt, die möglicherweise für die Software des Servers angepasst wurde.
Statusmeldungen in JavaScript verarbeiten
Wenn Sie ein Formular absenden oder eine API mit fetch() aufrufen, gelingt die Anfrage (das Promise wird aufgelöst), auch wenn der Server einen 4xx- oder 5xx-Fehler zurückgibt — eine 404 oder 500 ist immer noch eine gültige HTTP-Antwort, kein Netzwerkfehler. Daher müssen Sie den Status selbst prüfen. Die praktische Abkürzung ist response.ok, die nur für den Bereich 200–299 true ist; für alles andere verzweigen Sie auf response.status, um angemessen zu reagieren:
const form = document.querySelector("#signup");
form.addEventListener("submit", async (event) => {
event.preventDefault();
const response = await fetch("/api/signup", {
method: "POST",
body: new FormData(form),
});
if (response.ok) {
// 200–299: success
window.location.href = "/welcome";
} else if (response.status === 401) {
showMessage("Please log in first.");
} else if (response.status === 422) {
// Validation errors returned as JSON
const data = await response.json();
showMessage(data.error);
} else if (response.status === 429) {
// Rate limited — respect the Retry-After header
const wait = response.headers.get("Retry-After");
showMessage(`Too many attempts. Try again in ${wait}s.`);
} else if (response.status >= 500) {
showMessage("Server error — please try again later.");
} else {
showMessage(`Unexpected error (${response.status}).`);
}
});Beachten Sie, dass fetch() nur bei echten Netzwerkproblemen (keine Verbindung, CORS-Blockierung, DNS-Fehler) zurückgewiesen wird. Das Einschließen des Aufrufs in try…catch behandelt diese Fälle, während das obige if/else den HTTP-Status selbst behandelt.
Die wichtigsten Codes, die Sie zuerst kennen sollten. Wenn Sie nur eine Handvoll auswendig lernen, dann diese: 200 (OK), 301 (Moved Permanently), 302 (Found / temporäre Weiterleitung), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found) und 500 (Internal Server Error). Sie decken den Großteil dessen ab, was Sie in den Browser-Entwicklertools und Server-Logs sehen werden.
1xx: Information
| Statuscode | Meldung | Beschreibung |
|---|---|---|
| 100 | Continue | Bedeutet, dass der Server die Anfrage-Header empfangen hat und der Client den Anfrage-Body weiter senden soll. |
| 101 | Switching Protocols | Bedeutet, dass der Client, der eine Anfrage gestellt hat, den Server gebeten hat, das Protokoll zu wechseln (z. B. auf eine WebSocket-Verbindung zu upgraden). |
| 102 | Processing | Ein WebDAV-Code, der bedeutet, dass der Server die Anfrage akzeptiert hat, sie aber noch nicht abgeschlossen hat; wird verwendet, um zu verhindern, dass der Client bei einem langen Vorgang das Timeout erreicht. |
| 103 | Early Hints | Definiert in RFC 8297. Ermöglicht es dem Server, einige Antwort-Header (z. B. Link-Header zum Vorladen von Ressourcen) vor der endgültigen Antwort zu senden, damit der Browser früher mit dem Abrufen von Assets beginnen kann. |
2xx: Erfolgreich
| Statuscode | Meldung | Beschreibung |
|---|---|---|
| 200 | OK | Bedeutet, dass die Anfrage in Ordnung ist. Es ist die Standardantwort für erfolgreiche HTTP-Anfragen. |
| 201 | Created | Bedeutet, dass die Anfrage erfüllt wurde und eine neue Ressource erstellt wurde. |
| 202 | Accepted | Bedeutet, dass die Anfrage zur Verarbeitung akzeptiert wurde, die Verarbeitung aber noch läuft. |
| 203 | Non-Authoritative Information | Bedeutet, dass die Anfrage erfolgreich verarbeitet wurde, aber möglicherweise Informationen aus einer anderen Quelle zurückgibt. |
| 204 | No Content | Bedeutet, dass die Anfrage erfolgreich verarbeitet wurde, aber keinen Inhalt zurückgibt. |
| 205 | Reset Content | Bedeutet, dass die Anfrage verarbeitet wurde, aber keinen Inhalt zurückgibt und erfordert, dass der Anforderer die Dokumentansicht zurücksetzt. |
| 206 | Partial Content | Bedeutet, dass der Server aufgrund eines Range-Headers, der vom Client gesendet wurde, nur einen Teil der Ressource überträgt. |
3xx: Weiterleitung
| Statuscode | Meldung | Beschreibung |
|---|---|---|
| 300 | Multiple Choices | Zeigt mehrere Optionen für die Ressource an, denen der Client folgen kann. |
| 301 | Moved Permanently | Bedeutet, dass die Seite dauerhaft auf eine neue URL verschoben wurde. Browser und Suchmaschinen aktualisieren ihre Referenzen, sodass eine 301 das Link-Eigenkapital an die neue URL weitergibt und die richtige Wahl für SEO-freundliche Weiterleitungen ist. |
| 302 | Found | Bedeutet, dass die angeforderte Seite vorübergehend auf eine neue URL verschoben wurde. Suchmaschinen behalten die ursprüngliche URL im Index, verwenden Sie daher 302 (nicht 301), wenn der Umzug kurzfristig ist, z. B. während Wartungsarbeiten oder A/B-Tests. |
| 303 | See Other | Bedeutet, dass die Antwort auf die Anfrage unter einer anderen URL zu finden ist, die der Client mit GET abrufen soll. Wird häufig nach einem Formular-POST verwendet, um auf eine Ergebnisseite weiterzuleiten. |
| 304 | Not Modified | Bedeutet, dass die angeforderte Ressource seit der letzten Zwischenspeicherung nicht geändert wurde. Der Server sendet keinen Body, sodass der Browser seine gecachte Kopie wiederverwendet — dies spart Bandbreite und beschleunigt Folgebesuche. |
| 307 | Temporary Redirect | Bedeutet, dass die angeforderte Seite vorübergehend auf eine neue URL verschoben wurde. Im Gegensatz zu 302 muss der Client die ursprüngliche Anfragemethode beibehalten (ein POST bleibt ein POST). |
| 308 | Permanent Redirect | Bedeutet, dass die angeforderte Ressource dauerhaft auf eine neue URL verschoben wurde. |
Hier nicht aufgeführte Codes (z. B. 305 und 306) sind veraltet, selten oder erweiterungsspezifisch.
4xx: Client-Fehler
| Statuscode | Meldung | Beschreibung |
|---|---|---|
| 400 | Bad Request | Bedeutet, dass die Anfrage aufgrund fehlerhafter Syntax oder ungültiger Daten nicht erfüllt werden kann. |
| 401 | Unauthorized | Bedeutet, dass der Client nicht authentifiziert ist — gültige Anmeldedaten fehlen oder sind falsch. Der Server weiß noch nicht, wer Sie sind, und fordert Sie daher auf, sich anzumelden. (Hinweis: Der Name lautet „Unauthorized", meint aber eigentlich „Unauthenticated".) |
| 402 | Payment Required | Ist für die zukünftige Verwendung reserviert. |
| 403 | Forbidden | Bedeutet, dass der Client authentifiziert, aber nicht autorisiert ist — der Server weiß, wer Sie sind, aber Sie haben keine Berechtigung für diese Ressource. Im Gegensatz zu 401 hilft das erneute Senden von Anmeldedaten nicht. |
| 404 | Not Found | Bedeutet, dass die angeforderte Seite momentan nicht gefunden werden kann, aber möglicherweise in Zukunft wieder verfügbar ist. |
| 405 | Method Not Allowed | Bedeutet, dass die Anfrage an eine Seite gestellt wurde, die eine nicht unterstützte Anfragemethode für diese Seite verwendet. |
| 406 | Not Acceptable | Bedeutet, dass der Server nur eine Antwort generieren kann, die der Client nicht akzeptiert. |
| 407 | Proxy Authentication Required | Bedeutet, dass sich der Client zuerst beim Proxy authentifizieren muss. |
| 408 | Request Timeout | Bedeutet, dass der Server beim Warten auf die Anfrage ein Timeout erreicht hat. |
| 409 | Conflict | Bedeutet, dass die Anfrage aufgrund eines Konflikts in der Anfrage nicht abgeschlossen werden kann. |
| 410 | Gone | Bedeutet, dass die angeforderte Seite nicht mehr verfügbar ist. |
| 411 | Length Required | Bedeutet, dass die Inhaltslänge nicht definiert ist und der Server die Anfrage ohne diese nicht akzeptiert. |
| 412 | Precondition Failed | Bedeutet, dass eine in der Anfrage angegebene Vorbedingung vom Server als falsch ausgewertet wird. |
| 413 | Request Entity Too Large | Bedeutet, dass die Anfragedaten zu groß sind und der Server die Anfrage deshalb nicht akzeptiert. |
| 414 | Request-URI Too Long | Bedeutet, dass die URL zu lang ist und der Server die Anfrage deshalb nicht akzeptiert. Dies tritt auf, wenn Sie eine POST-Anfrage mit langen Abfrageinformationen in eine GET-Anfrage umwandeln. |
| 415 | Unsupported Media Type | Bedeutet, dass der Medientyp nicht unterstützt wird und der Server die Anfrage deshalb nicht akzeptiert. |
| 416 | Requested Range Not Satisfiable | Bedeutet, dass der Client einen Teil der Datei angefordert hat, den der Server nicht liefern kann. |
| 417 | Expectation Failed | Bedeutet, dass der Server die Anforderungen des Expect-Anfrage-Header-Feldes nicht erfüllen kann. |
| 418 | I'm a Teapot | Ein Spaß-Code aus RFC 2324 (dem Hyper Text Coffee Pot Control Protocol). Es ist kein echter Fehler, aber einige APIs geben ihn absichtlich zurück, sodass Sie ihm in der Praxis begegnen könnten. |
| 422 | Unprocessable Content | Bedeutet, dass die Anfrage wohlgeformt war, aber semantische Fehler enthält, die ihre Verarbeitung verhindern — wird häufig von APIs zurückgegeben, wenn Formular- oder JSON-Daten die Validierung nicht bestehen. |
| 429 | Too Many Requests | Bedeutet, dass der Client in einem bestimmten Zeitraum zu viele Anfragen gesendet hat („Rate Limiting"). Die Antwort enthält häufig einen Retry-After-Header, der angibt, wie lange gewartet werden soll, bevor ein erneuter Versuch unternommen wird. |
| 451 | Unavailable For Legal Reasons | Bedeutet, dass die angeforderte Ressource aufgrund rechtlicher Anforderungen nicht verfügbar ist, z. B. Zensur oder eine Takedown-Anordnung (die Zahl verweist auf den Roman Fahrenheit 451). |
Hier nicht aufgeführte Codes (z. B. 419, 420 und einige im Bereich 423–431) sind selten, framework-spezifisch oder nicht standardisiert. Einige — wie 421 (Misdirected Request, verwendet in HTTP/2) und 451 oben — sind standardisiert, aber im Alltag ungewöhnlich.
5xx: Server-Fehler
| Statuscode | Meldung | Beschreibung |
|---|---|---|
| 500 | Internal Server Error | Ist ein allgemeiner Fehler, den Benutzer erhalten, wenn keine spezifischere Meldung verfügbar ist. |
| 501 | Not Implemented | Bedeutet, dass der Server die Anfragemethode nicht erkennt oder nicht in der Lage ist, die Anfrage zu erfüllen. |
| 502 | Bad Gateway | Bedeutet, dass ein Server, der als Gateway, Reverse-Proxy oder Load-Balancer fungiert, eine ungültige Antwort vom vorgelagerten Anwendungsserver erhalten hat — häufig weil dieser Backend abgestürzt ist oder fehlerhafte Ausgaben zurückgegeben hat. |
| 503 | Service Unavailable | Bedeutet, dass der Server vorübergehend nicht in der Lage ist, die Anfrage zu bearbeiten (überlastet oder wegen Wartungsarbeiten nicht erreichbar). Wie bei 429 kann die Antwort einen Retry-After-Header enthalten, der Clients und Crawlern mitteilt, wann sie es erneut versuchen sollen — deshalb ist 503 der SEO-sichere Code für geplante Ausfallzeiten. |
| 504 | Gateway Timeout | Bedeutet, dass ein Server, der als Gateway, Reverse-Proxy oder Load-Balancer fungiert, nicht rechtzeitig eine Antwort vom vorgelagerten Server erhalten hat. Dies deutet auf ein langsames oder nicht reagierendes Backend hin, nicht auf den Proxy selbst. |
| 505 | HTTP Version Not Supported | Bedeutet, dass die in der Anfrage verwendete HTTP-Protokollversion vom Server nicht unterstützt wird. |
| 507 | Insufficient Storage | Ein WebDAV-Code, der bedeutet, dass der Server die zur Abwicklung der Anfrage benötigte Darstellung nicht speichern kann (zu wenig Speicherplatz). |
| 508 | Loop Detected | Ein WebDAV-Code, der bedeutet, dass der Server bei der Verarbeitung der Anfrage eine Endlosschleife erkannt und diese abgebrochen hat. |
| 511 | Network Authentication Required | Bedeutet, dass sich der Client authentifizieren muss, um Netzwerkzugang zu erhalten (häufig hinter einem Captive-Portal-WLAN zu sehen). |
Verwandte Kapitel
Der vom Server zurückgegebene Status hängt oft von der Anfrage selbst ab. Für weitere Informationen siehe:
- HTTP-Methoden — GET, POST und weitere, die bestimmen, wie sich einige Weiterleitungen (302 vs. 307) verhalten.
- HTML-Formulare — wie Formularübermittlungen Anfragen auslösen, die 303, 422 oder 429 zurückgeben können.
- HTML URL (Uniform Resource Locators) — die Adressen, auf die 3xx-Weiterleitungen und 404-Antworten verweisen.