Zum Inhalt springen

HTTP-Statuscodes

Eine HTTP-Antwort beginnt mit einem dreistelligen Code und einer kurzen Begründungsphrase. Die erste Ziffer ist die ganze Zusammenfassung: 1xx ist vorläufig, 2xx erfolgreich, 3xx weist woanders hin, 4xx beschuldigt die Anfrage, 5xx beschuldigt den Server. Wenn du nur das merkst, kannst du ein Log lesen, das du noch nie vorher gesehen hast.

Die Begründungssätze hier sind die aus den RFCs, auf Englisch, weil das ist, was auf dem Draht fährt – ein Server sendet "Not Found", nicht eine Übersetzung davon, und eine Phrase, die du in einem Log grep-t, muss den Bytes entsprechen, die tatsächlich gesendet wurden.

Die Unterscheidungen, die echte Probleme verursachen, sind innerhalb der Klassen statt zwischen ihnen: 401 versus 403, 301 versus 308, und 502 versus 503 beantworten jeweils eine andere Frage über das, was danach zu tun ist, und jedes wird routinemäßig für das andere verwendet.

1xx — Informativ

3

Vorläufig: die Antwort ist nicht abschließend und eine andere folgt.

CodeGrund-PhraseBegründungsphrase
100ContinueHeader erhalten, weiter den Body senden.
101Switching ProtocolsProtokolle wechseln – der WebSocket-Handshake.
103Early HintsFrühe Hinweise: lade diese Ressourcen vor, während die echte Antwort vorbereitet wird.

2xx — Erfolg

5

Die Anfrage war empfangen, verstanden und akzeptiert.

CodeGrund-PhraseBegründungsphrase
200OKErfolg, mit einem Body.
201CreatedErstellt.Sollte einen Location-Header tragen, der auf die neue Ressource weist.
202AcceptedErfolg, und absichtlich kein Body.
204No ContentErfolg, und absichtlich kein Body.Die richtige Antwort auf eine DELETE, oder ein Speichern ohne etwas zum Zurückgeben.
206Partial ContentTeilweiser Inhalt – die Antwort auf eine Range-Anfrage. Wiederaufbare Downloads.

3xx — Umleitung

6

Die Ressource ist woanders, oder deine gecachte Kopie ist immer noch gut.

CodeGrund-PhraseBegründungsphrase
301Moved PermanentlyDauerhaft verschoben. Aktualisiere deine Links; Caches können dies dauerhaft behalten.
302FoundGefunden – eine vorübergehende Umleitung.Weit verbreitet als Wechsel der Methode zu GET, was 307 behebt.
303See OtherSiehe anders: hole das Ergebnis mit GET. Die Umleitung nach einer Formular-POST.
304Not ModifiedNicht geändert – deine gecachte Kopie ist aktuell. Gesendet ohne Body.
307Temporary RedirectVorübergehende Umleitung, Methode und Body beibehalten.
308Permanent RedirectPermanente Umleitung, Methode und Body beibehalten.

4xx — Client-Fehler

14

Die Anfrage ist das Problem. Die Wiederholung unverändert wird wieder fehlschlagen.

CodeGrund-PhraseBegründungsphrase
400Bad RequestDer Server konnte die Anfrage überhaupt nicht parsen.
401UnauthorizedNicht authentifiziert – der Server weiß nicht, wer du bist.Benannt Unauthorized, aber es bedeutet Unauthtenticated. Sollte WWW-Authenticate einschließen.
403ForbiddenAuthentifiziert und immer noch nicht erlaubt. Bessere Anmeldedaten werden nicht helfen.
404Not FoundKeine solche Ressource, und der Server wird nicht sagen, ob es jemals eine gab.
405Method Not AllowedFalsche Methode für diese URL.Muss die Listen, die in einem Allow-Header funktionieren.
406Not AcceptableNichts verfügbar in einem Format, das dein Accept-Header nehmen wird.
409ConflictKonflikte mit dem aktuellen Zustand – eine Bearbeitung gegen eine veraltete Version.
410GoneWeg: es existierte und wurde absichtlich entfernt. Stärker als 404.
413Content Too LargeDer Body ist größer als der Server akzeptiert.
415Unsupported Media TypeDer Server handhabe nicht diesen Content-Type.
418I'm a teapotIch bin eine Teekanne. Ein 1998 April-Scherz, dauerhaft reserviert.
422Unprocessable ContentKorrekt geparst, Inhalt ungültig – ein fehlendes Feld, ein schlechter Wert.
429Too Many RequestsSuche nach Retry-After vor dem Erneuten Versuch und exponentiell abfallen.Suche nach Retry-After vor dem Erneuten Versuch und exponentiell abfallen.
451Unavailable For Legal ReasonsBlockiert aus rechtlichen Gründen. Die Zahl ist eine Anspielung auf Fahrenheit 451.

5xx — Server-Fehler

6

Die Anfrage kann fein sein. Dies sind die, die es wert sind, erneut versucht zu werden.

CodeGrund-PhraseBegründungsphrase
500Internal Server ErrorEin unbehandelter Fehler auf dem Server. Nichts, das du beheben könntest.
501Not ImplementedDer Server implementiert diese Methode überhaupt nicht.
502Bad GatewayEin Proxy erreichte den Upstream-Server und bekam etwas Unbrauchbares zurück.
503Service UnavailableAbsichtlich nicht bedient – überlastet oder in Wartung.Der Status, der Retry-After tragen sollte.
504Gateway TimeoutEin Proxy gab auf, auf den Upstream-Server zu warten.
505HTTP Version Not SupportedDie HTTP-Version in der Anfrage wird nicht unterstützt.

Häufige Fragen

Was ist der Unterschied zwischen 401 und 403?
401 Unauthorized bedeutet, die Anfrage war nicht authentifiziert – der Server weiß nicht, wer du bist, und ein korrekter 401 enthält einen WWW-Authenticate-Header, der dir sagt, wie du es beweist. 403 Forbidden bedeutet, es weiß genau, wer du bist, und du darfst das immer noch nicht haben. Eine 403 mit besseren Anmeldedaten für die gleiche Identität zu wiederholen wird nicht helfen.
Sollte ich 301 oder 308 für eine Umleitung verwenden?
308, wenn die Methode wichtig ist. Historisch wurden 301 und 302 weit verbreitet als "umleiten und auf GET wechseln" implementiert, was stille eine POST in eine GET verwandelt. 307 und 308 wurden eingeführt, um zu versprechen, dass Methode und Body erhalten bleiben. Für einen permanenten Umzug einer Seite, die nur jemals geholt wird, bleibt 301 die am besten verstandene Wahl.
Was bedeutet 422, das 400 nicht bedeutet?
400 Bad Request bedeutet, der Server konnte die Anfrage überhaupt nicht verstehen – malformt JSON, einen gebrochenen Header. 422 Unprocessable Content bedeutet, es parsed fein und der Inhalt ist trotzdem falsch: ein wohlgeformter Body mit einem fehlenden erforderlichen Feld oder einem Datum in der Vergangenheit. Die Aufteilung ist nützlich genau, weil die Berichtigung des Kunden in jedem Fall unterschiedlich ist.
Ist 418 ein echter Statuscode?
Es ist in dem Sinne real, dass es registriert ist und jede HTTP-Bibliothek es kennt, und ein Witz darin, dass es aus dem 1998 April Fools' Hyper Text Coffee Pot Control Protocol kommt. Versuche, die Zahl für praktische Nutzung zurückzufordern, wurden abgelehnt, daher ist sie dauerhaft für Teepötte reserviert.
Warum unterscheidet sich 503 von 502?
502 Bad Gateway bedeutet ein Proxy erreichte den Upstream-Server und bekam etwas Unbrauchbares zurück. 503 Service Unavailable bedeutet der Server selbst bedient sich absichtlich nicht gerade – überlastet oder in Wartung – und er ist derjenige, der einen Retry-After-Header tragen sollte, weil er derjenige ist, der sich erholen wird.