W3docs

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:

Gefahr

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.

Info

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

StatuscodeMeldungBeschreibung
100ContinueBedeutet, dass der Server die Anfrage-Header empfangen hat und der Client den Anfrage-Body weiter senden soll.
101Switching ProtocolsBedeutet, dass der Client, der eine Anfrage gestellt hat, den Server gebeten hat, das Protokoll zu wechseln (z. B. auf eine WebSocket-Verbindung zu upgraden).
102ProcessingEin 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.
103Early HintsDefiniert 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

StatuscodeMeldungBeschreibung
200OKBedeutet, dass die Anfrage in Ordnung ist. Es ist die Standardantwort für erfolgreiche HTTP-Anfragen.
201CreatedBedeutet, dass die Anfrage erfüllt wurde und eine neue Ressource erstellt wurde.
202AcceptedBedeutet, dass die Anfrage zur Verarbeitung akzeptiert wurde, die Verarbeitung aber noch läuft.
203Non-Authoritative InformationBedeutet, dass die Anfrage erfolgreich verarbeitet wurde, aber möglicherweise Informationen aus einer anderen Quelle zurückgibt.
204No ContentBedeutet, dass die Anfrage erfolgreich verarbeitet wurde, aber keinen Inhalt zurückgibt.
205Reset ContentBedeutet, dass die Anfrage verarbeitet wurde, aber keinen Inhalt zurückgibt und erfordert, dass der Anforderer die Dokumentansicht zurücksetzt.
206Partial ContentBedeutet, dass der Server aufgrund eines Range-Headers, der vom Client gesendet wurde, nur einen Teil der Ressource überträgt.

3xx: Weiterleitung

StatuscodeMeldungBeschreibung
300Multiple ChoicesZeigt mehrere Optionen für die Ressource an, denen der Client folgen kann.
301Moved PermanentlyBedeutet, 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.
302FoundBedeutet, 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.
303See OtherBedeutet, 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.
304Not ModifiedBedeutet, 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.
307Temporary RedirectBedeutet, 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).
308Permanent RedirectBedeutet, 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

StatuscodeMeldungBeschreibung
400Bad RequestBedeutet, dass die Anfrage aufgrund fehlerhafter Syntax oder ungültiger Daten nicht erfüllt werden kann.
401UnauthorizedBedeutet, 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".)
402Payment RequiredIst für die zukünftige Verwendung reserviert.
403ForbiddenBedeutet, 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.
404Not FoundBedeutet, dass die angeforderte Seite momentan nicht gefunden werden kann, aber möglicherweise in Zukunft wieder verfügbar ist.
405Method Not AllowedBedeutet, dass die Anfrage an eine Seite gestellt wurde, die eine nicht unterstützte Anfragemethode für diese Seite verwendet.
406Not AcceptableBedeutet, dass der Server nur eine Antwort generieren kann, die der Client nicht akzeptiert.
407Proxy Authentication RequiredBedeutet, dass sich der Client zuerst beim Proxy authentifizieren muss.
408Request TimeoutBedeutet, dass der Server beim Warten auf die Anfrage ein Timeout erreicht hat.
409ConflictBedeutet, dass die Anfrage aufgrund eines Konflikts in der Anfrage nicht abgeschlossen werden kann.
410GoneBedeutet, dass die angeforderte Seite nicht mehr verfügbar ist.
411Length RequiredBedeutet, dass die Inhaltslänge nicht definiert ist und der Server die Anfrage ohne diese nicht akzeptiert.
412Precondition FailedBedeutet, dass eine in der Anfrage angegebene Vorbedingung vom Server als falsch ausgewertet wird.
413Request Entity Too LargeBedeutet, dass die Anfragedaten zu groß sind und der Server die Anfrage deshalb nicht akzeptiert.
414Request-URI Too LongBedeutet, 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.
415Unsupported Media TypeBedeutet, dass der Medientyp nicht unterstützt wird und der Server die Anfrage deshalb nicht akzeptiert.
416Requested Range Not SatisfiableBedeutet, dass der Client einen Teil der Datei angefordert hat, den der Server nicht liefern kann.
417Expectation FailedBedeutet, dass der Server die Anforderungen des Expect-Anfrage-Header-Feldes nicht erfüllen kann.
418I'm a TeapotEin 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.
422Unprocessable ContentBedeutet, 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.
429Too Many RequestsBedeutet, 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.
451Unavailable For Legal ReasonsBedeutet, 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

StatuscodeMeldungBeschreibung
500Internal Server ErrorIst ein allgemeiner Fehler, den Benutzer erhalten, wenn keine spezifischere Meldung verfügbar ist.
501Not ImplementedBedeutet, dass der Server die Anfragemethode nicht erkennt oder nicht in der Lage ist, die Anfrage zu erfüllen.
502Bad GatewayBedeutet, 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.
503Service UnavailableBedeutet, 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.
504Gateway TimeoutBedeutet, 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.
505HTTP Version Not SupportedBedeutet, dass die in der Anfrage verwendete HTTP-Protokollversion vom Server nicht unterstützt wird.
507Insufficient StorageEin WebDAV-Code, der bedeutet, dass der Server die zur Abwicklung der Anfrage benötigte Darstellung nicht speichern kann (zu wenig Speicherplatz).
508Loop DetectedEin WebDAV-Code, der bedeutet, dass der Server bei der Verarbeitung der Anfrage eine Endlosschleife erkannt und diese abgebrochen hat.
511Network Authentication RequiredBedeutet, 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.

Übungen

Übung
Ein angemeldeter Benutzer fordert eine Seite an, die er nicht sehen darf. Welchen Statuscode sollte der Server zurückgeben?
Ein angemeldeter Benutzer fordert eine Seite an, die er nicht sehen darf. Welchen Statuscode sollte der Server zurückgeben?
Übung
Sie verschieben eine Seite dauerhaft auf eine neue URL und möchten, dass Suchmaschinen die Ranking-Signale an die neue Adresse weitergeben. Welchen Weiterleitungscode sollten Sie verwenden?
Sie verschieben eine Seite dauerhaft auf eine neue URL und möchten, dass Suchmaschinen die Ranking-Signale an die neue Adresse weitergeben. Welchen Weiterleitungscode sollten Sie verwenden?
Übung
Ein Formular-POST ist erfolgreich, und der Server möchte dem Browser mitteilen, die Formularfelder zu leeren, ohne neuen Seiteninhalt zu senden. Welcher Statuscode passt am besten?
Ein Formular-POST ist erfolgreich, und der Server möchte dem Browser mitteilen, die Formularfelder zu leeren, ohne neuen Seiteninhalt zu senden. Welcher Statuscode passt am besten?
Was this page helpful?