HTTP Status Codes sind ein wichtiger Bestandteil des Hypertext Transfer Protocols und somit ein wichtiger Bestandteil des Internets. Der HTTP Status Code wird von Servern als Antwort auf eine HTTP-Anfrage gesendet und informiert über den Erfolg dieser. Der bekannteste hierbei ist der "Status 404", der z.B. einem Browser vermittelt, dass die abgerufene Webseite leider nicht existiert.
HTTP Status Codes können extrem gut für das Testen einer Webseite verwendet werden, da die 5xx Status Codes bereits explizit auf einen Fehler hindeuten. Aus diesem Grund sollten bei Webseiten immer die erwarteten Status Codes mit Koalaping überprüft werden.
Aber nicht nur das Auftreten eines 5xx Status Codes kann auf einen Fehler hindeuten. Jede Abweichung vom gewünschten Verhalten kann auf einen potentiellen Fehler oder sogar eine Sicherheitlücke hinweisen. Auf Inhaltsebene wäre es zum Beispiel kritisch, wenn eine interne Weiterleitung (301) nicht mehr weiterleitet, sondern mit einem 200 Status Code antwortet und somit potentiell das SEO-Ranking negativ beeinflusst. Seiten, die in einem geschützten Bereich liegen, also im Normalfall eine 403 zurückliefern würden, sollten dies auch nach einem Deployment weiterhin machen. Ein 200 Status Code würde hier bedeuten, dass sich bei der Sicherheit ein Fehler eingeschlichen hat.
HTTP Status Codes werden in fünf Kategorien eingeteilt. Informationen (1xx), erfolgreiche Anfragen (2xx), Umleitungen (3xx), Client-Fehler (4xx) und Server-Fehler (5xx).
Informationen (1xx)
Code | Nachricht | Bedeutung |
100 | Continue | Die laufende Anfrage an den Server wurde noch nicht zurückgewiesen. (Wird im Zusammenhang mit dem „expect 100-continue“-Header-Feld verwendet) Der Client kann nun mit der potentiell sehr großen Anfrage fortfahren. |
101 | Switching Protocols | Wird verwendet, wenn der Server eine Anfrage mit gesetztem „Upgrade“-Header-Feld empfangen hat und mit dem Wechsel zu einem anderen Protokoll einverstanden ist. Anwendung findet dieser Status Code beispielsweise im Wechsel von HTTP zu WebSocket. |
102 | Processing | Wird verwendet um ein Timeout zu vermeiden, während der Server eine zeitintensive Anfrage bearbeitet. |
Erfolgreiche Anfragen (2xx)
Code | Nachricht | Bedeutung |
200 | OK | Die Anfrage wurde erfolgreich bearbeitet und das Ergebnis der Anfrage wird in der Antwort übertragen. |
201 | Created | Die Anfrage wurde erfolgreich bearbeitet. Die angeforderte Ressource wurde vor dem Senden der Antwort erstellt. Das „Location“-Header-Feld enthält eventuell die Adresse der erstellten Ressource. |
202 | Accepted | Die Anfrage wurde akzeptiert, wird aber zu einem späteren Zeitpunkt ausgeführt. Das Gelingen der Anfrage kann nicht garantiert werden. |
203 | Non-Authoritative Information | Der Server agiert als „Transforming Proxy“, erhielt eine 200 OK Antwort von der Quelle und antwortet mit einem veränderten Dokument der Quelle. |
204 | No Content | Die Anfrage wurde erfolgreich durchgeführt, die Antwort enthält jedoch bewusst keine Daten. |
205 | Reset Content | Die Anfrage wurde erfolgreich durchgeführt, der Client soll das Dokument neu aufbauen und Formulareingaben zurücksetzen. |
206 | Partial Content | Der angeforderte Teil wurde erfolgreich übertragen (wird im Zusammenhang mit einem „Content-Range“-Header-Feld oder dem Content-Type multipart/byteranges verwendet). Kann einen Client über Teil-Downloads informieren (wird zum Beispiel von Wget genutzt, um den Downloadfortschritt zu überwachen oder einen Download in mehrere Streams aufzuteilen). |
207 | Multi-Status | Die Antwort enthält ein XML-Dokument, das mehrere Statuscodes zu unabhängig voneinander durchgeführten Operationen enthält. |
208 | Already Reported | WebDAV (RFC 5842) – Die Mitglieder einer WebDAV-Bindung wurden bereits zuvor aufgezählt und sind in dieser Anfrage nicht mehr vorhanden. |
226 | IM Used | RFC 3229 – Der Server hat eine GET-Anforderung für die Ressource erfüllt, die Antwort ist eine Darstellung des Ergebnisses von einer oder mehrerer Instanz-Manipulationen, bezogen auf die aktuelle Instanz. |
Umleitung (3xx)
Code | Nachricht | Bedeutung |
300 | Multiple Choices | Die angeforderte Ressource steht in verschiedenen Arten zur Verfügung. Die Antwort enthält eine Liste der verfügbaren Arten. Das „Location“-Header-Feld enthält eventuell die Adresse der vom Server bevorzugten Repräsentation. |
301 | Moved Permanently | Die angeforderte Ressource steht ab sofort unter der im „Location“-Header-Feld angegebenen Adresse bereit (auch Redirect genannt). Die alte Adresse ist nicht länger gültig. |
302 | Found (Moved Temporarily) | Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit. Die alte Adresse bleibt gültig. Die Browser folgen meist mit einem GET, auch wenn der ursprüngliche Request ein POST war. Wird in HTTP/1.1 je nach Anwendungsfall durch die Statuscodes 303 oder 307 ersetzt. 302-Weiterleitung ist aufgrund eines Suchmaschinen-Fehlers, dem URL-Hijacking, in Kritik geraten. |
303 | See Other | Die Antwort auf die durchgeführte Anfrage lässt sich unter der im „Location“-Header-Feld angegebenen Adresse beziehen. Der Browser soll mit einem GET folgen, auch wenn der ursprüngliche Request ein POST war. |
304 | Not Modified | Der Inhalt der angeforderten Ressource hat sich seit der letzten Abfrage des Clients nicht verändert und wird deshalb nicht übertragen. Zu den Einzelheiten siehe Browser-Cache-Versionsvergleich. |
305/td | Use Proxy | Die angeforderte Ressource ist nur über einen Proxy erreichbar. Das „Location“-Header-Feld enthält die Adresse des Proxy. |
306 | (reserviert) | 306 wird nicht mehr verwendet, ist aber reserviert. Es wurde für „Switch Proxy“ verwendet. |
307 | Temporary Redirect | Die angeforderte Ressource steht vorübergehend unter der im „Location“-Header-Feld angegebenen Adresse bereit. Die alte Adresse bleibt 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. |
308 | Permanent Redirect | 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 301. |
Client-Fehler (4xx)
Code | Nachricht | Bedeutung |
400 | Bad Request | Die Anfrage-Nachricht war fehlerhaft aufgebaut. |
401 | Unauthorized | Die Anfrage kann nicht ohne gültige Authentifizierung durchgeführt werden. Wie die Authentifizierung durchgeführt werden soll, wird im „WWW-Authenticate“-Header-Feld der Antwort übermittelt. |
402 | Payment Required | Übersetzt: Bezahlung benötigt. Dieser Status ist für zukünftige HTTP-Protokolle reserviert. |
403 | Forbidden | Die Anfrage wurde mangels Berechtigung des Clients nicht durchgeführt, bspw. weil der authentifizierte Benutzer nicht berechtigt ist, oder eine als HTTPS konfigurierte URL nur mit HTTP aufgerufen wurde. |
404 | Not Found | Die angeforderte Ressource wurde nicht gefunden. Dieser Statuscode kann ebenfalls verwendet werden, um eine Anfrage ohne näheren Grund abzuweisen. Links, welche auf solche Fehlerseiten verweisen, werden auch als Tote Links bezeichnet. |
405 | Method Not Allowed | Die Anfrage darf nur mit anderen HTTP-Methoden (zum Beispiel GET statt POST) gestellt werden. Gültige Methoden für die betreffende Ressource werden im „Allow“-Header-Feld der Antwort übermittelt. |
406 | Not Acceptable | Die angeforderte Ressource steht nicht in der gewünschten Form zur Verfügung. Gültige „Content-Type“-Werte können in der Antwort übermittelt werden. |
407 | Proxy Authentication Required | Analog zum Statuscode 401 ist hier zunächst eine Authentifizierung des Clients gegenüber dem verwendeten Proxy erforderlich. Wie die Authentifizierung durchgeführt werden soll, wird im „Proxy-Authenticate“-Header-Feld der Antwort übermittelt. |
408 | Request Timeout | Innerhalb der vom Server erlaubten Zeitspanne wurde keine vollständige Anfrage des Clients empfangen. |
409 | Conflict | Die Anfrage wurde unter falschen Annahmen gestellt. Im Falle einer PUT-Anfrage kann dies zum Beispiel auf eine zwischenzeitliche Veränderung der Ressource durch Dritte zurückgehen. |
410 | Gone | Die angeforderte Ressource wird nicht länger bereitgestellt und wurde dauerhaft entfernt. |
411 | Length Required | Die Anfrage kann ohne ein „Content-Length“-Header-Feld nicht bearbeitet werden. |
412 | Precondition Failed | Eine in der Anfrage übertragene Voraussetzung, zum Beispiel in Form eines „If-Match“-Header-Felds, traf nicht zu. |
413 | Request Entity Too Large | Die gestellte Anfrage war zu groß, um vom Server bearbeitet werden zu können. Ein „Retry-After“-Header-Feld in der Antwort kann den Client darauf hinweisen, dass die Anfrage eventuell zu einem späteren Zeitpunkt bearbeitet werden könnte. |
414 | URI Too Long | Die URL der Anfrage war zu lang. Ursache ist oft eine Endlosschleife aus Redirects. |
415 | Unsupported Media Type | Der Inhalt der Anfrage wurde mit ungültigem oder nicht erlaubtem Medientyp übermittelt. |
416 | Requested range not satisfiable | Der angeforderte Teil einer Ressource war ungültig oder steht auf dem Server nicht zur Verfügung. |
417 | Expectation Failed | Verwendet im Zusammenhang mit einem „Expect“-Header-Feld. Das im „Expect“-Header-Feld geforderte Verhalten des Servers kann nicht erfüllt werden. |
418 | I’m a teapot | Dieser Code ist als Aprilscherz der IETF zu verstehen. Innerhalb eines scherzhaften Protokolls zum Kaffeekochen, dem Hyper Text Coffee Pot Control Protocol, zeigt er an, dass fälschlicherweise eine Teekanne anstatt einer Kaffeekanne verwendet wurde. Dieser Scherz-Statuscode ist auf einigen Webseiten zu finden obwohl er weder Bestandteil von HTTP ist noch in der Status Code Registry definiert ist. Er soll zukünftig als "reserviert" gelistet werden. |
420 | Policy Not Fulfilled | In W3C PEP (Working Draft 21. November 1997) wird dieser Code vorgeschlagen um mitzuteilen, dass eine Bedingung nicht erfüllt wurde. |
421 | Misdirected Request | 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 | 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. |
423 | Locked | Die angeforderte Ressource ist zurzeit gesperrt. |
424 | Failed Dependency | 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 | Der Server verlangt vom Client, dass er die Anfrage mit einem anderen Protokoll wiederholt. Ein Anwendungsfall ist das Umschalten auf HTTP mit Transport Layer Security. |
428 | Precondition Required | Für die Anfrage waren nicht alle Vorbedingungen erfüllt. 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). |
429 | Too Many Requests | Der Client hat zu viele Anfragen in einem bestimmten Zeitraum gesendet. |
431 | Request Header Fields Too Large | Die Maximallänge eines Headerfelds oder des Gesamtheaders wurde überschritten |
449 | The request should be retried after doing the appropriate action | Genutzt in Antworten des Microsoft Exchange Servers. |
451 | Unavailable For Legal Reasons | Dieser Statuscode soll darauf hinweisen, dass die angeforderte Ressource aufgrund von gesetzlichen Bestimmungen (Copyrighteinschränkungen, Zensur etc., eventuell beschränkt auf ein bestimmtes Land) nicht verfügbar ist. |
499 | Client Closed Request | Ein nicht standardmäßiger Statuscode, der von nginx für den Fall eingeführt wurde, dass ein Client die Verbindung schließt, während nginx die Anforderung verarbeitet. |
Server-Fehler (5xx)
Code | Nachricht | Bedeutung |
500 | Internal Server Error | Dies ist ein „Sammel-Statuscode“ für unerwartete Serverfehler. |
501 | Not Implemented | Die Funktionalität, um die Anfrage zu bearbeiten, wird von diesem Server nicht bereitgestellt. Ursache ist zum Beispiel eine unbekannte oder nicht unterstützte HTTP-Methode. |
502 | Bad Gateway | Der Server konnte seine Funktion als Gateway oder Proxy nicht erfüllen, weil er seinerseits eine ungültige Antwort erhalten hat. |
503 | Service Unavailable | Der Server steht temporär nicht zur Verfügung, zum Beispiel wegen Überlastung oder Wartungsarbeiten. Ein „Retry-After“-Header-Feld in der Antwort kann den Client auf einen Zeitpunkt hinweisen, zu dem die Anfrage eventuell bearbeitet werden könnte. |
504 | Gateway Timeout | Der Server konnte seine Funktion als Gateway oder Proxy nicht erfüllen, weil er innerhalb einer festgelegten Zeitspanne keine Antwort von seinerseits benutzten Servern oder Diensten erhalten hat. |
505 | HTTP Version not supported | Die benutzte HTTP-Version (gemeint ist die Zahl vor dem Punkt) wird vom Server nicht unterstützt oder abgelehnt. |
506 | Variant Also Negotiates | Die Inhaltsvereinbarung der Anfrage ergibt einen Zirkelbezug. |
507 | Insufficient Storage | Die Anfrage konnte nicht bearbeitet werden, weil der Speicherplatz des Servers dazu zurzeit nicht mehr ausreicht. |
508 | Loop Detected | 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 | Die Anfrage wurde verworfen, weil sonst die verfügbare Bandbreite überschritten würde (inoffizielle Erweiterung einiger Server). |
510 | Not Extended | Die Anfrage enthält nicht alle Informationen, die die angefragte Server-Extension zwingend erwartet. |
511 | Network Authentication Required | Der Client muss sich zuerst authentifizieren um Zugang zum Netzwerk zu erhalten. |
Jeder dieser HTTP Status Codes sagt etwas über den Zustand einer Webseite aus, diese "Vitalzeichen" können mit Leankoala ganz einfach und vor allem automatisiert überwacht werden.