HTTP/Statuscodes

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche
Die Antwort- oder Statuscodes von HTTP bestimmen direkt die Bedeutung der Antwort auf eine HTTP-Anfrage. Sie werden stets in der ersten Zeile der Response (= Server-Antwort) in der Form HTTP/1.1 Statuscode übermittelt, wobei Statuscode aus einer dreistelligen Zahl und einer kurzen Beschreibung besteht. Die Statuscodes werden nach ihrer ersten Ziffer in Gruppen unterschiedlicher Bedeutung eingeteilt.

Die folgende Liste ist nicht vollständig, da jede Anwendung von HTTP eigene Statuscodes definieren kann, wie es z. B. WebDAV tut.

Im Folgenden wird mit dem Begriff „Client“ stets das anfragende Programm, z. B. ein Browser; mit „Server“ stets das antwortende Programm, z. B. der Server einer Webseite, bezeichnet.

Beachten Sie: Der Client ist längst nicht immer ein Browser. Die Suchmaschinenanbieter scannen regelmäßig das Internet mittels so genannter Crawler, die die bekannten Webseiten regelmäßig abrufen und auf Änderungen prüfen. Diese Crawler folgen den Links, die sie auf Webseiten finden, und rufen auch diese ab. An dieser Stelle ist es wichtig, dass Ihr Server korrekte Statuscodes meldet. Wenn Ihre Site nicht aus statischen HTML Seiten besteht, sondern von einer Scriptsprache wie PHP generiert wird, kann es durchaus passieren, dass ein Crawler-Abruf auf eine ungültige Ressource führt oder falsche Parameter enthält. Solche Abfragen dürfen Sie keinesfalls mit einem 2xx-Statuscode beantworten, denn andernfalls registriert die Suchmaschine einen gültigen Link und trägt Ihre Fehlerseite in den Suchindex ein. Verwenden Sie statt dessen einen passenden 4xx-Statuscode.

1xx: Informativ

Code Bezeichnung Beschreibung
100 Continue Fortfahren Der Client soll die Anfrage fortsetzen. Diese Antwort dient dazu, den Client zu informieren, dass die Anfrage akzeptiert wurde, und er mit weiteren Daten fortfahren kann. In der Regel wird dieser Code nur gesendet, wenn der Client einen Header Expect: 100-continue im Request mitgesendet hat.
101 Switching Protocols Tausche Protokoll Wenn die Anfrage einen Upgrade-Header enthält, der für den Server akzeptabel ist, wird das Ändern des Protokolls hiermit bestätigt. Direkt nach diesem Statuscode und einer Leerzeile beginnt der Server mit der Übertragung im neuen Protokoll. Ein Beispiel ist der Wechsel von HTTP auf HTTP über TLS nach RFC 2817.
102 Processing in Bearbeitung Wird verwendet, um ein Timeout zu vermeiden, während der Server eine zeitintensive Anfrage bearbeitet (RFC 2518)

2xx: Erfolg

Code Bezeichnung Beschreibung
200 OK OK Die Anfrage war erfolgreich. Die Antwort enthält je nach Anfragemethode die angeforderten Daten.
201 Created Erzeugt Die Anfrage hat dazu geführt, dass erfolgreich eine neue Resource erzeugt wurde. Deren URI kann im Antwortheader Location mitgeteilt werden.
202 Accepted Akzeptiert Die Anfrage wurde angenommen, wird aber noch nicht bearbeitet. Es ist nicht möglich, Statusinformationen zu erhalten, wenn die Bearbeitung tatsächlich stattfindet, z. B. einen Erfolg festzustellen.
203 Non-Authoritative Information Unverbindliche Information Die Metainformationen im Antwort-Header entsprechen unter Umständen nicht denen, die vom Ursprungsserver gesendet wurden. Antwortfelder können z. B. von Proxys verändert werden.
204 No Content Kein Inhalt Die Anfrage wurde akzeptiert und bearbeitet, allerdings existiert kein Inhalt, der zurückgesendet werden kann. Clients sollen in diesem Fall den alten Inhalt weiterhin anzeigen.
205 Reset Content Inhalt zurücksetzen Die Anfrage wurde erfolgreich ausgeführt, und der Client wird angehalten, das bisher angezeigte Dokument in den Ursprungszustand zu versetzen. Dem entspricht z. B. das Drücken eines Reset-Buttons <input type="reset" /> in einem HTML-Formular.
206 Partial Content Partieller Inhalt Falls die Anfrage einen Range-Header enthält, antwortet der Server mit diesem Statuscode, dass die Antwort im gewünschten Bereich zurückgesendet wird. Ein Beispiel sind unterbrochene und wieder aufgenommene Downloads.
207 Multi-Status Multi-Status Die Antwort enthält ein XML-Dokument, das mehrere Statuscodes zu unabhängig voneinander durchgeführten Operationen enthält.
208 Already Reported bereits berichtet WebDAV RFC 5842 – Die Mitglieder einer WebDAV-Bindung wurden bereits zuvor aufgezählt und sind in dieser Anfrage nicht mehr vorhanden.
226 IM Used Instanzmanipulation verwendet RFC 3229 – Der Server hat eine GET-Anforderung für die Ressource erfüllt, die Antwort ist eine Darstellung des Ergebnisses einer oder mehrerer Instanz-Manipulationen, bezogen auf die aktuelle Instanz.

3xx: Umleitung

Code Bezeichnung Beschreibung
300 Multiple Choices Mehrere Möglichkeiten Die angeforderte Resource entspricht einem Set möglicher Resourcen, aus denen der Client wählen soll. Hat der Server ein bevorzugtes Ziel, soll dies in einem Location-Header mitgeschickt werden.
301 Moved Permanently Dauerhaft verschoben Der angeforderten Resource wurde permanent eine neue URI zugewiesen. Diese soll im Location-Header mitgeschickt werden. War die Anfrage-Methode GET oder HEAD, kann der Client automatisch zur neuen URI weiterleiten, andernfalls darf er es nur nach Benutzereingabe.
302 Found Gefunden Ist in HTTP 1.1 durch die Codes 303 und 307 ersetzt worden. Die angeforderte Resource wurde zwar gefunden, hat aber derzeit eine andere URI. Nichtsdestotrotz soll der Client weiterhin unter dieser URI nach dieser Resource anfragen. Weiterleitung ist analog zum 301-Status handzuhaben.

Mit Statuscode 302 auf eine andere Domain umzuleiten kann unangenehme Folgen haben. Suchmaschinen können das zum Anlass nehmen, die Zieladresse als temporär einzustufen und aus dem Index zu streichen. Statt dessen wird die weiterleitende Seite in den Index genommen (URL Hijacking). Weiterleitungen auf andere Domains sollten deshalb, um dieses Hijacking zu vermeiden, mittels HTTP 301 stattfinden, und ansonsten sollte man beim Weiterleiten HTTP 303 oder HTTP 307 verwenden.

303 See Other Siehe anderswo Die Antwort kann unter einer anderen URI mit der GET-Methode geholt werden. Zweck dieses Statuscodes ist es, nach einer POST-Anfrage nahtlos zu einer ausgewählten Resource weiterleiten zu können.
304 Not Modified Nicht verändert Die Resource hat sich seit der letzten Anfrage nicht geändert, die Antwort enthält keine Daten. Dies ist z. B. der Fall, wenn der Client durch einen If-Modified-Since-Header erklärt, dass er die Resource in einem älteren Stand bereits besitzt.
305 Use Proxy Nutze Proxy Der Zugriff auf die Resource muss zwingend durch den Proxy erfolgen, der im Location-Header angegeben ist.
306 (unused) (nicht verwendet) Der Statuscode wurde in einer früheren Version für die Antwort Switch Proxy reserviert, wird aber nicht mehr verwendet.
307 Temporary Redirect Zeitweise Umleitung Die angeforderte Resource wurde zwar gefunden, hat aber derzeit eine andere URI. Der Client soll jedoch weiterhin unter dieser URI nach dieser Resource anfragen. Weiterleitung ist analog zum 301-Status handzuhaben.

Da in alten Browser-Implementationen der 302-Status so gehandhabt wurde, dass unabhängig von der verwendeten Anfragemethode weitergeleitet wurde, führt HTTP 1.1 303 und 307 ein, um Servern die Möglichkeit zu geben, explizit die Weiterleitung zu kontrollieren. Ein weiteres Problem ist das URL-Hijacking, das dadurch umgangen werden soll.

308 Permanent Redirect dauerhafte Umleitung Die angeforderte Ressource steht ab sofort unter der im „Location“-Header-Feld angegebenen Adresse bereit, die alte Adresse ist nicht länger gültig. Der Browser soll mit derselben Methode folgen wie beim ursprünglichen Request (d. h. einem POST folgt ein POST). Dies ist der wesentliche Unterschied zu 302/303.[1]

4xx: Client-Fehler

Code Bezeichnung Beschreibung
400 Bad Request Ungültige Anfrage Der Client hat eine fehlerhafte Anfrage geschickt, die der Server aufgrund fehlerhafter Syntax nicht bearbeiten kann.
401 Unauthorized Unautorisiert Die Anfrage kann ohne Autorisierung nicht verarbeitet werden. Zu diesem Zweck muss der Server einen WWW_Authenticate-Antwortheader mitschicken, der erläutert, wie die Authentifizierung vorzunehmen ist. HTTP definiert die zwei Methoden „Basic“ und „Digest“ vor.
402 Payment Required Bezahlung benötigt Dieser Statuscode ist für zukünftige Verwendung reserviert.
403 Forbidden Verboten Der Zugriff ist dauerhaft verboten. Eine Authorisation wird nicht anerkannt, und der Client soll die Anfrage nicht noch einmal stellen.
404 Not Found Nicht gefunden Der Server konnte die vom Client angeforderte Ressource nicht finden. Häufigste Ursache ist ein sogenannter Toter Link.

Der 404-Status kann ebenfalls zurückgeliefert werden, wenn kein anderer Statuscode zutreffend ist oder der Client bewusst ohne Angabe eines näheren Grundes abgewiesen werden soll.

405 Method Not Allowed Methode nicht erlaubt Die Anfrage-Methode (wie GET oder POST) ist nicht erlaubt. Diese Antwort kann z. B. zurückkommen, wenn man WebDAV-Methoden verwendet, ohne dass der Server diese beherrscht. In einem Allow-Antwortheader muss der Server erlaubte Methoden auflisten.
406 Not Acceptable Nicht akzeptabel Die Ressource kann nicht in einer vom Client angefragten Form geliefert werden. Z. B. kann nach einem Bild mit dem Medientyp image/gif angefragt werden, der Server findet aber nur einen Treffer für image/png.
407 Proxy Authentication Required Proxy-Authentifizierung benötigt Ähnlich wie die 401-Antwort erfordert diese Antwort eine Authentifizierung. In diesem Fall muss sich der Client allerdings gegenüber einem Proxy ausweisen. Der Proxy muss dazu das Antwortfeld Proxy-Authenticate mitliefern.
408 Request Time-out Anfrage-Zeitüberschreitung Die Anfrage wurde vom Client nicht in der vom Server vorgegebenen Zeit beendet. Der Fehler kann z. B. beim Hochladen großer Dateien auftreten.
409 Conflict Konflikt Die Anfrage kann nicht bearbeitet werden, weil sich dadurch ein Konfliktfall bei der angefragten Ressource ergeben würde. Soll z. B. eine Ressource per PUT-Methode verändert werden, die aber auf dem Server bereits eine neuere Version aufweist, würde die Bearbeitung einen Konflikt erzeugen.
410 Gone Verschwunden Die Ressource existiert nicht mehr, der Server kennt aber keine Weiterleitungsadresse. Dieser Zustand ist als dauerhaft anzunehmen.
411 Length Required Länge benötigt Die Bearbeitung der Anfrage ohne „Content-Length“-Header wird vom Server abgelehnt.
412 Precondition Failed Vorbedingung missglückt Eine vom Client vorgegebene Bedingung ist nicht erfüllbar.
413 Request Entity Too Large Anfrage-Entität zu groß Der Inhalt der Anfrage (z. B. eine hochgeladene Datei) ist zu groß, die Anfrage wird abgelehnt.
414 Request-URI Too Large Anfrage-URI zu lang Die Anfrage-URI ist zu lang. Der HTTP-Standard definiert keine feste Obergrenze für URI-Längen, d. h., das Erscheinen dieses Fehlers hängt vom Server-Programm und seiner internen Einstellung ab.
415 Unsupported Media Type Nicht unterstützter Medientyp Der angefragte Medien- oder MIME-Typ wird nicht unterstützt.
416 Requested range not satisfiable Anfrage-Bereich nicht erfüllbar Der angefragte Teilbereich der Ressource existiert nicht oder ist ungültig. Dies kann z. B. im Zusammenhang mit partiellen Downloads auftreten.
417 Expectation Failed Erwartung missglückt Die Erwartung des Clients, ausgedrückt im „Expect“-Header, kann nicht erfüllt werden. Wenn der Server ein Proxy ist, kann das z. B. bedeuten, dass er die nächste Sprungadresse nicht ansteuern kann.
420 Policy Not Fulfilled Bedingung nicht erfüllt In W3C PEP (Working Draft 21. November 1997) wird dieser Code vorgeschlagen, um mitzuteilen, dass eine Bedingung nicht erfüllt wurde.
421 Misdirected Request Fehlgeleitete Anforderung Die Anfrage wurde an einen Server gesendet, der nicht in der Lage ist, eine Antwort zu senden. Eingeführt in HTTP/2.
422 Unprocessable Entity kann nicht verarbeitet werden wird Verwendet, wenn weder die Rückgabe von Statuscode 415 noch 400 gerechtfertigt wäre, eine Verarbeitung der Anfrage jedoch zum Beispiel wegen semantischer Fehler abgelehnt wird (RFC 4918)
423 Locked gesperrt Die angeforderte Ressource ist zurzeit gesperrt (RFC 4918)
424 Failed Dependency vorhergehende Bedingung nicht erfüllt Die Anfrage konnte nicht durchgeführt werden, weil sie das Gelingen einer vorherigen Anfrage voraussetzt.
425 Unordered Collection In den Entwürfen von WebDav Advanced Collections definiert, aber nicht im „Web Distributed Authoring and Versioning (WebDAV) Ordered Collections Protocol“
426 Upgrade Required Update benötigt Der Client sollte auf Transport Layer Security (TLS/1.0) umschalten.
428 Precondition Required Vorbedingung benötigt Für die Anfrage sind nicht alle Vorbedingungen erfüllt gewesen. Dieser Statuscode soll Probleme durch Race Conditions verhindern, indem eine Manipulation oder Löschen nur erfolgt, wenn der Client dies auf Basis einer aktuellen Ressource anfordert (Beispielsweise durch Mitliefern eines aktuellen ETag-Header) (RFC 6585)
429 Too Many Requests zu viele Anfragen Der Client hat zu viele Anfragen in einem bestimmten Zeitraum gesendet. (RFC 6585)
431 Request Header Fields Too Large Länge zu groß Die Maximallänge eines Headerfelds oder des Gesamtheaders wurde überschritten (RFC 6585)
451 Unavailable For Legal Reasons Ressource aus rechtlichen Gründen nicht verfügbar Die Ressource ist (in einem bestimmten Land) aus rechtlichen Gründen (z. B. Copyright oder Zensur) nicht verfügbar. 2015 eingeführt und nach Ray Bradburys Roman Fahrenheit 451 benannt[2].

5xx: Server-Fehler

Code Bezeichnung Beschreibung
500 Internal Server Error Interner Server-Fehler Der Server entdeckt einen internen Fehler und kann deshalb die Anfrage nicht bearbeiten. Fehler in Programmen auf dem Server, z. B. in PHP-Skripten, können diese Antwort provozieren.
501 Not Implemented Nicht implementiert Der Server verfügt nicht über die nötige Funktionalität, um die Anfrage zu verarbeiten. Diese Antwort ist angemessen, wenn die in der Anfrage verwendete HTTP-Methode nicht erkannt oder unterstützt wird.
502 Bad Gateway Schlechtes Portal Der Server, in diesem Fall ein Proxy, kann die Anfrage nicht ausführen, weil im weiteren Verlauf ein Fehler aufgetreten ist.
503 Service Unavailable Dienst nicht verfügbar Der Dienst ist derzeit nicht verfügbar. Dies kann aufgrund hohen Datenaufkommens oder wegen Wartungsarbeiten passieren.
504 Gateway Time-out Portal-Auszeit Der Proxy kann die Anfrage wegen einer Zeitüberschreitung nicht bearbeiten.
505 HTTP Version Not Supported HTTP-Version nicht unterstützt Die angeforderte HTTP-Version wird nicht unterstützt.
506 Variant Also Negotiates Zirkelbezug Die Inhaltsvereinbarung der Anfrage ergibt einen Zirkelbezug.
507 Insufficient Storage Speicher des Servers reicht nicht aus Die Anfrage konnte nicht bearbeitet werden, weil der Speicherplatz des Servers dazu zurzeit nicht mehr ausreicht.
508 Loop Detected Endlosschleife Die Operation wurde nicht ausgeführt, weil die Ausführung in eine Endlosschleife gelaufen wäre. Definiert in der Binding-Erweiterung für WebDAV gemäß RFC 5842, weil durch Bindings zyklische Pfade zu WebDAV-Ressourcen entstehen können.
509 Bandwidth Limit Exceeded Übertragungsrate/Datenvolumen überschritten Die Anfrage wurde verworfen, weil sonst die verfügbare Bandbreite überschritten würde (inoffizielle Erweiterung einiger Server).
510 Not Extended zu wenig Informationen Die Anfrage enthält nicht alle Informationen, die die angefragte Server-Extension zwingend erwartet (RFC 2774)
511 Network Authentication Required Identizifierung benötigt Der Client muss sich zuerst authentifizieren um Zugang zum Netzwerk zu erhalten (RFC 6585)

Weblinks


  • Die HTTP-Statuscodes werden für HTTP 1.0 in RFC 1945 und für HTTP 1.1 in RFC 2616 definiert.
  • RFC 2518 definiert die Erweiterungen von HTTP 1.1 für WebDAV.
  • In RFC 2324 wird der Statuscode 418 I'm a Teapot definiert, das RFC ist jedoch ein Aprilscherz.


Quellen

  1. IETF: https://tools.ietf.org/html/draft-reschke-http-status-308-07
  2. An HTTP Status Code to Report Legal Obstacles, IETF, 29.02.2016