x-over.com :: Digital Communications Explored
 
x-over cubes


Web 2.0 / Ajax

e-Marketing

Projekte






...

HTTP-Statuscodes

HTTP-Statuscodes sind ein integraler Teil des HTTP-Protokolls. Jede Antwort auf eine HTTP-Anfrage wird von einem entsprechenden Statuscode in den HTTP-Headerdaten1 begleitet, der angibt, ob die Anfrage erfolgreich war, fehl schlug oder ob sich z.B. das Dokument in der Zwischenzeit an einer anderen Stelle befindet.

Neben Fehlermeldungen kann aber der Statuscode auch begleitende Informationen zu dem angeforderten Dokument enthalten, wie beispielsweise eine Anfrage zur Authentifizierung mit Benutzernamen und Passwort. Ein Web-Browser muss den Statuscode auswerten und entsprechend reagieren.

Dabei ist es hilfreich, die einzelnen Statuscodes, ihre Bedeutung und mögliche Ursachen für ihr Vorkommen zu kennen.

Ein Statuscode ist eine dreistellige Zahl. Die erste Ziffer teilt den Statuscode dabei in eine von fünf Kategorien:


Statuscode Kategorie Bedeutung
-1xx Informational / zur Information Anfrage erhalten, Anfrage wird bearbeitet.
Die Antwort gibt nur Auskunft über den Status einer Anfrage, enthält aber keine Nutzdaten. Sie sind erst seit HTTP/1.1 definiert und sind Teil des Persistent Connections-Modells.
-2xx Success / Erfolg Die Anfrage wurde erfolgreich empfangen, akzeptiert und bearbeitet.
-3xx Redirection / Umleitung Die Anfrage kann nicht bearbeitet werden, ohne dass der Client weitere Daten sendet bzw. entsprechend reagiert.
-4xx Client Error / Client-seitiger Fehler Diese Kategorie bezeichnet Fehler, die aus einem falschen Verhalten des Clients herrühren.
-5xx Server Error / Serverseitiger Fehler Die Anfrage des Clients war gültig, aber am Server ist ein Fehler aufgetreten.

Die Statuscodes werden unter anderen in den Protokolldateien des Web-Servers aufgezeichnet. Dort kann man sich schnell einen Eindruck davon machen, welche Fehler und Probleme im Betrieb auftauchen. Auch die meisten Programme, die Protokolldateien auswerten und Statistiken erstellen, schlüsseln die Zahlen nach HTTP-Statuscodes auf.

Mit serverseitigen Script-Sprachen kann man die Erstellung der HTTP-Headerdaten beeinflussen. Dabei kann man auch auch HTTP- Statuscodes mitschicken, die als Antwort an den aufrufenden Browser gesendet werden. So kann man z.B. erreichen, dass der Besucher an ein anderes Dokument weitergeschickt wird. Wir verwenden HTTP-Statuscodes unter anderem in unserer Implementierung der Fehlerseiten, um einen Besucher eine konkrete Fehlermeldung in Deutsch und Englisch zurückliefern zu können.

Die HTTP-Statuscodes gehören zur Spezifikation des HTTP-Protokolls. Zuständig für die Spezifikation ist das W3-Konsortium. Die Spezifikation erfolgt in Form von RFCs2 (Requests for Comments). Auf der Seite http://www.w3.org/Protocols/ des W3-Konsortiums findet man alle relevanten und aktuelle Informationen rund um das HTTP-Protokoll.

Übersicht

Die folgende Tabelle enthält eine Übersicht der HTTP-Statuscodes wie sie laut HTTP/1.1 (RFC2616) definiert sind.


Statuscode zugehörige Meldung Bedeutung
100 Continue Fortfahren. Wird faktisch kaum verwendet. Dient im Persistent-Connection-Modell dazu, den Client zu informieren, dass seine Anfrage akzeptiert wurde und der auf die Antwort weiterhin warten soll.
101 Switching Protocols Protokoll wechseln. Wird auch kaum verwendet. Der Server gibt damit zu verstehen, dass er eine Aufforderung des Clients zum Ändern der HTTP-Protokollversion akzeptiert.
200 OK Der Server kann die angeforderten Daten wie gewünscht senden. Dies ist der Normalfall, wenn keine Probleme auftauchen. Der größte Teil aller Anfragen an den Web-Server sollte mit diesem Statuscode enden.
201 Created Ein Objekt (z.B. eine Datei oder ein Verzeichnis) wurde erfolgreich angelegt. Dies ist die übliche Antwort bei einer put-Anfrage3.
202 Accepted Der Server hat die Anfrage des Browsers akzeptiert, liefert aber keine Daten als Antwort. Dies tritt meistens dann auf, wenn der Server nur als Proxy agiert, und die Abarbeitung der Anfrage an ein anderes Programm übergibt.
203 Non-Authoritative Information Dieser Statuscode entspricht dem Code 200, wird aber dann zurückgeliefert, wenn der antwortende Server nicht der Original-Server sondern z.B. ein Proxy-Server ist.
204 No Content Die Anfrage war erfolgreich, jedoch werden keine Nutzdaten geliefert. Ein Web-Browser sollte bei Bearbeiten dieser Antwort, die vorhergehende Seite stehen lassen.
205 Reset Content Die Anfrage war erfolgreich, jedoch werden keine Nutzdaten geliefert. Im Gegensatz zu 204 sollte aber der Web-Browser die dem Benutzer gezeigte Seite neu laden.
206 Partial Content Korrekte Antwort auf einen Partial-GET-Request4. Die Antwort enthält nur den angeforderten Teil des Dokuments.
300 Multiple Choices Die angeforderten Daten sind unter mehreren verschiedenen URIs5 vorhanden (z.B. jeweils in einer anderen Sprachversion). Anstelle der Daten werden die verfügbaren URIs als Liste übertragen. Der Web-Browser entscheidet dann entweder automatisch, oder präsentiert dem Benutzer die Auswahl in einem Dialog.
301 Moved Permanently Die angeforderten Daten befinden sich nicht mehr unter dem URI, sie wurden dauerhaft auf eine andere Adresse verschoben. In der Statusmeldung wird angegeben, unter welchem URI sich die Daten jetzt befinden. Ein Web-Browser, der diese Antwort vom Server erhält, kann beispielsweise gleich die neue Adresse anfordern.
302 Found Die angeforderten Daten wurden vorübergehend zu einem anderen URI verschoben. In der Statusmeldung wird angegeben, unter welcher Adresse sich die Daten derzeit befinden. Ein Web- Browser, der diese Antwort erhält, kann beispielsweise gleich die temporär gültige Adresse anfordern.
303 See Other Die angeforderten Daten sind unter einem anderen URI verfügbar und sollten von dort mit Hilfe der GET-Methode angefordert werden. Dieser Statuscode ist für CGI- Scripts gedacht, die mit der POST-Methode aufgerufen wurden und den Browser auf eine andere Ressource lenken wollen.
304 Not Modified Erfolgt als Antwort auf einen conditional-GET, wenn sich die angeforderten Daten seit dem angegebenen Zeitpunkt nicht geändert haben. Nutzdaten werden nicht mitgesendet. Dieser Statuscode ist neben dem Code 200 einer der häufigsten in der Praxis. Er wird verursacht durch Web-Browser, die aufgrund ihrer Cache- Einstellungen Daten erst wieder nach einer bestimmten Zeit vom Original-Server laden.
305 Use Proxy Die angeforderten Daten sollen statt von diesem Server von dem in der Statusmeldung angegebenen Proxy-Server angefordert werden.
306 [Unused] Reserviert. Wurde in einem früheren Entwurf des HTTP-Protokolls verwendet, ist aber jetzt nicht nehr Bestandteil der Spezifikation. Wird aus Kompatibilitätsgründen beibehalten.
307 Temporary Redirect Wie Statuscode 302. Dabei darf der Browser aber nicht automatisch auf den anderen URI weiterleiten.
400 Bad Request Die Anfrage enthält Syntaxfehler. Der Server kann die Anfrage deshalb nicht bearbeiten. Das kann beispielsweise vorkommen, wenn die Anfrage dadurch zustande kam, dass ein Anwender versuchte, einen URI händisch in die Adresszeile des Browsers einzugeben und dabei ungültige Zeichen verwendete.
401 Unauthorized Die angeforderten Daten sind zugangsgeschützt. Der Server kann die Daten nur senden, wenn eine gültige Zugangskennung, bestehend aus Benutzername und Passwort, bei der Anfrage mit gesendet wird. Das passiert in der Praxis immer dann, wenn eine Adresse aufgerufen wird, die zugangsgeschützt ist. Der Web-Browser zeigt dann, nachdem er diesen Statuscode erhalten hat, einen Dialog zum Eingeben von Benutzername und Kennwort an. Mit den eingegebenen Daten startet er dann eine neue Anfrage an den Server.
402 Payment Required Die angeforderten Daten sind kostenpflichtig. Der Server kann die Daten nur senden, wenn eine Bestätigung der Zahlung für die Daten bei der Anfrage mitgesendet wird. Derzeit wird dies aufgrund fehlender einheitlicher technischer Grundlagen für Micropayment noch nicht verwendet.
403 Forbidden Die angeforderten Daten sind zugangsgeschützt. Die angegebenen Daten, mit denen der Zugang erlaubt werden soll, sind ungültig. Das kann z.B. vorkommen, wenn zuvor der Statuscode 401 zurückgeliefert worden war und der Browser nun die nächste Anfrage mit den Zugangsdaten gestartet hat, die er vom Anwender im Dialog abgefragt hat, und diese Daten aber ungültig sind. Manche Web-Browser wiederholen den Dialog zum Eingeben der Zugangsdaten dann noch zwei mal, und nach der dritten Falscheingabe wird dem Anwender die Fehlermeldung "Forbidden" ausgegeben.
404 Not Found Der angeforderte URI existiert nicht. Dies ist neben den Statuscodes 200 und 304 einer der häufigsten Fälle in der Praxis. Er tritt immer dann ein, wenn ein Verweis auf eine nicht oder nicht mehr existierende Adresse auf dem Server führt, oder wenn der Anwender versucht hat, eine Adresse auf dem Server durch händisches Eintippen in der Adresszeile des Browsers aufzurufen, und diese Adresse aber nicht existiert.
405 Method Not Allowed Die angegebene Übertragungsmethode ist auf dem Server nicht erlaubt. Die Daten werden deshalb nicht übertragen. Das kann beispielsweise vorkommen, wenn in der Konfiguration des Web-Servers außer der get-Methode keine weitere Methode erlaubt ist, ein HTML-Formular aber einen CGI-Aufruf mit der post-Methode enthält.
406 Not Acceptable Die Anfrage ist in dieser Form nicht akzeptabel. Die Daten werden deshalb nicht übertragen.
407 Proxy Authentication Required Der anfragende Client ist ein Proxy-Server. Die Daten werden an diesen Server nur übertragen, wenn er sich als gültiger Proxy-Server ausweist. Dieser Statuscode findet derzeit noch keine Verwendung. Damit soll auf die Dauer ein ähnliches Handling wie mit dem Statuscode 401 etabliert werden, jedoch nicht für anfragende Browser, sondern für anfragende Proxy-Server. Auf diese Weise könnte es Web-Anbietern möglich werden, in der Serverkonfiguration unerwünschte Proxy-Server vom Zwischenspeichern der eigenen Daten auszusperren.
408 Request Timeout Der Server hat eine erwartete Anfrage nicht innerhalb des dafür festgelegten Maximalzeitraums erhalten. Die Verbindung zum anfragenden Browser wird deshalb abgebaut. Angeforderte Daten werden nicht übertragen.
409 Conflict Der Server kann die angeforderten Daten nicht senden, weil ein Konflikt mit einem anderen Prozess aufgetaucht ist. Das kann beispielsweise passieren, wenn ein anderer Prozess eine angeforderte Datei gerade mit einem exklusiven File-Locking (keinerlei Dateizugriff für andere Prozesse nicht erlaubt) versehen hat.
410 Gone Die angeforderten Daten wurden zu einem anderen URI verschoben. Dem Server ist aber nicht bekannt, wohin. Deshalb kann er sie nicht senden - andernfalls würde ein Statuscode 301 oder 302 gesendet worden.
411 Length Required Die Daten werden nicht gesendet. Sie können nur gesendet werden, wenn die Anfrage eine Angabe zu content-length enthält. Der Browser kann versuchen, die Anfrage neu zu formulieren und dabei die Länge der an den Server gesendeten Anfragedaten mit zu übermitteln.
412 Precondition Failed Eine oder mehrere Bedingungen, die bei der Anfrage gestellt wurden, treffen nicht zu. Die angeforderten Daten werden deshalb nicht übertragen.
413 Request Entity Too Large Der Server kann die Anfrage nicht bearbeiten, weil diese zu viele Zeichen enthält. Die angeforderten Daten werden deshalb nicht übertragen.
414 Request-URI Too Long Der Server kann die Anfrage nicht bearbeiten, weil die angeforderte Adresse zu viele Zeichen enthält. Die angeforderten Daten werden deshalb nicht übertragen.
415 Unsupported Media Type Der Server kann die Anfrage nicht bearbeiten, weil er keinen Mime-Type für den angeforderten Datentyp kennt. Die angeforderten Daten werden deshalb nicht übertragen.
416 Requested Range Not Satisfiable Die Anfrage enthält Angaben, welcher Byte-Bereich von dem angeforderten URI übertragen werden soll. Sowohl der Anfangswert als auch der Endwert des angegebenen Bereichs liegen außerhalb des verfügbaren Bytebereichs, z.B. wenn ein Bytebereich von 1000 bis 2000 angegeben wird, die Ressource aber nur 500 Byte hat. Die angeforderten Daten werden deshalb nicht übertragen.
417 Expectation Failed Die Anfrage enthält im expect-Feld bestimmte Wünsche, die der Server nicht erfüllen kann. Die angeforderten Daten werden deshalb nicht übertragen.
500 Internal Server Error Der Server kann die angeforderten Daten nicht senden, weil auf dem Server ein Fehler aufgetreten ist. Beispielsweise konnte das aufgerufene CGI-Script nicht gestartet werden.
501 Not Implemented Die Anfrage enthält Anforderungen, die der Server nicht bearbeiten kann, weil die Voraussetzunen dazu nicht implementiert sind. Die angeforderten Daten können deshalb nicht gesendet werden.
502 Bad Gateway Zum Bearbeiten der Anfrage musste der Server einen anderen Server aufrufen, erhielt dabei jedoch eine Fehlermeldung. Die angeforderten Daten können deshalb nicht gesendet werden.
503 Service Unavailable Der Server kann die Anfrage wegen Überlastung nicht bearbeiten. Die angeforderten Daten können deshalb nicht gesendet werden. In der Statusmeldung kann stehen, wann die Anfrage frühestens wieder bearbeitet werden kann. Im Gegensatz zum Statuscode 202 verarbeitet der Server die Daten nicht, sobald er wieder Kapazitäten hat.
504 Gateway Timeout Zum Bearbeiten der Anfrage musste der Server einen anderen Server aufrufen, erhielt dabei jedoch nach einem festgelegten Maximalzeitraum keine Antwort. Die angeforderten Daten können deshalb nicht gesendet werden.
505 HTTP Version Not Supported Der Server unterstützt die im HTTP-Header der Anfrage angegebene HTTP-Version nicht. Die angeforderten Daten werden deshalb nicht gesendet.


Die HTTP-Headerdaten sind nicht mit den HTML-Headerdaten (zwischen <head> und </head>) zu verwechseln.Letztere sind Bestandteil eines HTML-Dokuments, während die HTTP-Headerdaten Teil jeder HTTP-Anfrage und Antwort sind, unabhängig davon um welche Art von Datei (.jpg, .gif, .pdf, etc.) es sich handelt.

Alle RFCs sind unter den Seiten der IETF (Internet Engineering Taskforce) zu finden - http://www.ietf.org/rfc.html.

HTTP-PUT-Requests dienen zB dazu, Seiten oder Bilder auf einen Server hochzuladen.

Mit einem Partial-GET-Request kann ein Teil eines Dokuments angefordert werden. Im Request müssen dazu Angaben zur Größe (content-length) bzw. dem Umfang (content-range) mitgegeben werden.

URI = Universal Resource Identifier (zB. http://www.x-over.com/knowhow.httpstatuscodes.htm).




x-over.com :: Footer



Website-Programmierung, Ajax, Javascript, PHP Suchmaschinen, Suchmaschinenoptimierung, Keywords Web 2.0, Ajax, XMLHttp
Visuals (c) 2004 - Thomas Zettelmayr / Atelier Lichtbruch - Exklusives Webdesign Wien Österreich
over x vertical lines