Netzwerk
Liste der HTTP-Statuscodes
Vollständige Liste der HTTP-Statuscodes (1xx-5xx) mit Bedeutung, häufigen Ursachen und Lösungen für Entwickler. Enthält ein Nachschlage-Tool — Codenummer eingeben und sofort die Details anzeigen.
| Code | Name | Bedeutung | Häufige Ursachen |
|---|---|---|---|
| 1xx — Informell | |||
| 100 | Continue (Continue) | Zeigt an, dass der Server den ersten Teil der Anfrage erhalten hat und der Client mit dem Senden des restlichen Inhalts fortfahren soll. | Wird zurückgegeben, wenn ein Client vor einem großen Anfrage-Body einen Expect: 100-continue-Header sendet. |
| 101 | Switching Protocols (Switching Protocols) | Zeigt an, dass der Server die Anfrage im Upgrade-Header akzeptiert und zu einem anderen Protokoll wechselt. | Eine normale Antwort beim Aufbau einer WebSocket-Verbindung. |
| 102 | Processing (Processing) | Zeigt an, dass der Server die Anfrage akzeptiert hat und sie noch verarbeitet, wobei noch keine Antwort bereitsteht (WebDAV). | Wird gesendet, um Zeitüberschreitungen bei lang laufenden WebDAV-Operationen zu vermeiden. |
| 103 | Early Hints (Early Hints) | Sendet vorläufige Header wie Link vor der endgültigen Antwort, damit der Browser Ressourcen vorab laden kann. | Wird von CDNs oder Reverse-Proxys hinzugefügt, um das Vorabladen von CSS/JS zu beschleunigen. |
| 2xx — Erfolg | |||
| 200 | OK (OK) | Die häufigste Erfolgsantwort; sie zeigt an, dass die Anfrage erfolgreich verarbeitet wurde. | |
| 201 | Created (Created) | Zeigt an, dass durch die Anfrage eine neue Ressource erstellt wurde. | Wird von APIs zurückgegeben, die Ressourcen per POST erstellen; enthält typischerweise einen Location-Header, der auf die neue Ressource verweist. |
| 202 | Accepted (Accepted) | Zeigt an, dass die Anfrage angenommen wurde, die Verarbeitung aber noch nicht abgeschlossen ist (asynchrone Verarbeitung). | Wird von asynchronen APIs verwendet, die Aufgaben lediglich in eine Warteschlange einreihen, oder von Endpunkten zur Stapelverarbeitung. |
| 204 | No Content (No Content) | Zeigt an, dass die Anfrage erfolgreich war, aber kein Inhalt zurückgegeben wird. | Häufig nach einem erfolgreichen DELETE oder einem PUT-Update, bei dem das API-Design keinen Antwort-Body vorsieht. |
| 206 | Partial Content (Partial Content) | Zeigt an, dass basierend auf dem Range-Header des Clients nur ein Teil der Ressource zurückgegeben wurde. | Eine normale Antwort beim Video-Seeking oder bei fortsetzbaren Downloads. |
| 3xx — Weiterleitung | |||
| 301 | Moved Permanently (Moved Permanently) | Zeigt an, dass die Ressource dauerhaft zu einer neuen URL verschoben wurde; Suchmaschinen übertragen die Ranking-Signale auf die neue URL. | Wird verwendet, um alte URLs nach einer Änderung der URL-Struktur oder einer Domain-Migration umzuleiten. |
| 302 | Found (Found) | Zeigt an, dass sich die Ressource vorübergehend unter einer anderen URL befindet. Für dauerhafte Verschiebungen sollte stattdessen 301 verwendet werden. | Wird häufig für temporäres Routing während Wartungsarbeiten oder für Weiterleitungen nach dem Login verwendet. |
| 303 | See Other (See Other) | Zeigt an, dass das Ergebnis mit GET von einer anderen URL abgerufen werden soll (das Post-Redirect-Get-Muster). | Wird nach einem Formular-Submit (POST) verwendet, um den erneuten Absende-Dialog des Browsers zu vermeiden. |
| 304 | Not Modified (Not Modified) | Zeigt an, dass sich die zwischengespeicherte Ressource nicht geändert hat und der Body daher nicht erneut gesendet wird. | Wird bei bedingten Anfragen mit If-None-Match / If-Modified-Since zurückgegeben, wenn der Cache noch gültig ist. |
| 307 | Temporary Redirect (Temporary Redirect) | Eine temporäre Weiterleitung, die im Gegensatz zu 302 die ursprüngliche Methode und den Body beim erneuten Senden beibehält. | Wird bei API-Designs verwendet, die POST/PUT-Anfragen umleiten müssen, ohne den Body zu verlieren. |
| 308 | Permanent Redirect (Permanent Redirect) | Eine dauerhafte Weiterleitung, die im Gegensatz zu 301 die ursprüngliche Methode und den Body beim erneuten Senden beibehält. | Wird bei API-Versionsmigrationen verwendet, die eine dauerhafte Verschiebung bei Beibehaltung der Methode erfordern. |
| 4xx — Client-Fehler | |||
| 400 | Bad Request (Bad Request) | Zeigt an, dass die Syntax oder die Parameter der Anfrage fehlerhaft sind und der Server sie nicht verarbeiten kann. | Wird meist durch JSON-Syntaxfehler, fehlende Pflichtparameter oder Typinkonsistenzen verursacht. |
| 401 | Unauthorized (Unauthorized) | Zeigt fehlende oder ungültige Authentifizierungsdaten an (trotz des Namens bedeutet er eigentlich "nicht authentifiziert"). | Wird oft durch ein abgelaufenes Token, einen fehlenden Authorization-Header oder einen falschen API-Schlüssel verursacht. |
| 402 | Payment Required (Payment Required) | Für zukünftige Verwendung reserviert; wird manchmal genutzt, um anzuzeigen, dass eine Zahlung erforderlich ist. | Einige APIs verwenden diesen Code zweckentfremdet, um überschrittene Nutzungslimits oder einen abgelaufenen Tarif zu signalisieren. |
| 403 | Forbidden (Forbidden) | Zeigt an, dass der Server die Anfrage verstanden hat, sie aber nicht autorisiert. | Typische Ursachen sind unzureichende Berechtigungen, IP-Beschränkungen, Verstöße gegen die CORS-Richtlinie oder falsch konfigurierte Dateiberechtigungen. |
| 404 | Not Found (Not Found) | Zeigt an, dass die angeforderte Ressource nicht gefunden werden konnte. | Meist verursacht durch eine nicht registrierte Route, einen Tippfehler in der URL oder den Zugriff auf eine bereits gelöschte Ressource. |
| 405 | Method Not Allowed (Method Not Allowed) | Zeigt an, dass die Ressource zwar existiert, die angegebene HTTP-Methode dafür jedoch nicht erlaubt ist. | Tritt typischerweise auf, wenn POST an einen reinen GET-Endpunkt gesendet wird, oder bei einer ähnlichen Methoden-Unstimmigkeit. |
| 406 | Not Acceptable (Not Acceptable) | Zeigt an, dass der Server keine Antwort erzeugen kann, die dem Accept-Header des Clients entspricht. | Tritt zum Beispiel auf, wenn ein Client Accept: application/xml anfordert, die API aber nur JSON zurückgibt. |
| 408 | Request Timeout (Request Timeout) | Zeigt an, dass der Server beim Warten auf den Abschluss der Anfrage durch den Client eine Zeitüberschreitung hatte. | Wird häufig durch langsame Verbindungen, große Uploads oder einen mitten in der Anfrage stockenden Client verursacht. |
| 409 | Conflict (Conflict) | Zeigt an, dass die Anfrage mit dem aktuellen Zustand der Ressource in Konflikt steht. | Tritt bei Fehlern durch optimistisches Sperren während gleichzeitiger Bearbeitungen oder bei Versuchen, Duplikate zu erstellen, auf. |
| 410 | Gone (Gone) | Zeigt an, dass die Ressource dauerhaft entfernt wurde und nicht zurückkehren wird (ein stärkeres Signal als 404). | Wird verwendet, um Suchmaschinen explizit mitzuteilen, dass Inhalte absichtlich gelöscht und eingestellt wurden. |
| 413 | Payload Too Large (Payload Too Large) | Zeigt an, dass der Anfrage-Body die Größe überschreitet, die der Server akzeptieren möchte. | Meist verursacht durch das Überschreiten eines Datei-Upload-Limits oder eine zu niedrige Body-Size-Einstellung in Nginx/PHP. |
| 414 | URI Too Long (URI Too Long) | Zeigt an, dass die Anfrage-URI länger ist, als der Server verarbeiten möchte. | Tritt häufig auf, wenn eine große Datenmenge in GET-Query-Parameter gepackt wird. |
| 415 | Unsupported Media Type (Unsupported Media Type) | Zeigt an, dass der Server den Medientyp des Anfrage-Bodys nicht unterstützt. | Häufig, wenn Content-Type: text/plain an eine JSON-API gesendet wird, oder bei ähnlichen Header-Fehlkonfigurationen. |
| 422 | Unprocessable Entity (Unprocessable Entity) | Zeigt an, dass die Syntax der Anfrage gültig ist, die semantische Validierung jedoch fehlgeschlagen ist. | Wird häufig verwendet, um Formularvalidierungsfehler zu melden, etwa fehlende Pflichtfelder oder ungültige Formate. |
| 425 | Too Early (Too Early) | Zeigt an, dass der Server sich weigert, eine Anfrage zu verarbeiten, die aufgrund des Early-Data-Risikos wiederholt werden könnte. | Kann als Schutz vor Replay-Angriffen mit TLS-1.3-0-RTT-Daten zurückgegeben werden. |
| 429 | Too Many Requests (Too Many Requests) | Zeigt an, dass der Client innerhalb eines bestimmten Zeitfensters zu viele Anfragen gesendet hat (Rate Limiting). | Wird durch das Überschreiten eines API-Rate-Limits verursacht; der Retry-After-Header gibt oft an, wie lange vor einem erneuten Versuch gewartet werden soll. |
| 451 | Unavailable For Legal Reasons (Unavailable For Legal Reasons) | Zeigt an, dass der Inhalt aufgrund einer rechtlichen Anordnung, etwa eines Gerichtsbeschlusses, nicht verfügbar ist. | Wird zurückgegeben, wenn ein Content-Anbieter den Zugriff aufgrund eines Urheberrechtsanspruchs oder länderspezifischer gesetzlicher Vorgaben blockiert. |
| 5xx — Server-Fehler | |||
| 500 | Internal Server Error (Internal Server Error) | Zeigt an, dass auf dem Server ein unerwarteter Fehler aufgetreten ist und die Anfrage nicht verarbeitet werden konnte. | Die Ursachen sind vielfältig: unbehandelte Ausnahmen in der Anwendung, Fehlkonfigurationen, Datenbankverbindungsfehler und mehr. |
| 501 | Not Implemented (Not Implemented) | Zeigt an, dass der Server die zur Erfüllung der Anfrage erforderliche Funktionalität nicht unterstützt. | Tritt auf, wenn eine nicht implementierte HTTP-Methode (z. B. PATCH) an eine ältere Server-Implementierung gesendet wird. |
| 502 | Bad Gateway (Bad Gateway) | Zeigt an, dass ein Proxy oder Gateway eine ungültige Antwort vom vorgelagerten Server erhalten hat. | Meist verursacht dadurch, dass der vorgelagerte Anwendungsserver ausgefallen oder abgestürzt ist. |
| 503 | Service Unavailable (Service Unavailable) | Zeigt an, dass der Server vorübergehend überlastet ist oder gewartet wird und die Anfrage nicht bearbeiten kann. | Hauptsächlich verursacht durch Ressourcenerschöpfung bei hoher Last oder ein geplantes Wartungsfenster. |
| 504 | Gateway Timeout (Gateway Timeout) | Zeigt an, dass ein Proxy oder Gateway keine rechtzeitige Antwort vom vorgelagerten Server erhalten hat. | Oft verursacht durch lang laufende Backend-Verarbeitung, Netzwerklatenz oder einen hängenden vorgelagerten Server. |
| 505 | HTTP Version Not Supported (HTTP Version Not Supported) | Zeigt an, dass der Server die in der Anfrage verwendete HTTP-Version nicht unterstützt. | Tritt auf, wenn ein alter Client oder ein falsch konfigurierter Proxy mit einer unerwarteten HTTP-Version kommuniziert. |
| 507 | Insufficient Storage (Insufficient Storage) | Zeigt an, dass der Server nicht über genügend Speicherplatz verfügt, um die Anfrage abzuschließen (WebDAV). | Wird zurückgegeben, wenn ein Dateispeichervorgang aufgrund von unzureichendem Festplattenspeicher fehlschlägt. |
| 508 | Loop Detected (Loop Detected) | Zeigt an, dass der Server bei der Verarbeitung der Anfrage eine Endlosschleife festgestellt hat (WebDAV). | Tritt auf, wenn eine WebDAV-Bindungskonfiguration eine zirkuläre Referenz enthält. |
| 511 | Network Authentication Required (Network Authentication Required) | Zeigt an, dass sich der Client authentifizieren muss, um Netzwerkzugriff zu erhalten. | Wird verwendet, um zu einer Captive-Portal-Anmeldeseite umzuleiten, etwa in öffentlichen WLANs. |
Tipps
- 404 und 410 sehen ähnlich aus, aber 410 signalisiert explizit, dass Inhalte absichtlich entfernt wurden und nicht zurückkehren. Verwenden Sie 410 für Inhalte ohne Ersatz, um Suchmaschinen ein klareres Signal zu senden.
- 301 vs. 308 und 302 vs. 307 folgen derselben Unterscheidung zwischen "dauerhaft" und "temporär", aber 308 und 307 behalten beim erneuten Senden den ursprünglichen POST-Body bei, im Gegensatz zu 301 und 302.
- Wenn Sie einen 429 Too Many Requests erhalten, prüfen Sie den
Retry-After-Header und warten Sie diese Zeit ab, bevor Sie es erneut versuchen — wiederholtes Anfragen kann dazu führen, dass Sie ganz blockiert werden. - Ein 5xx-Fehler signalisiert ein serverseitiges Problem und keinen Fehler in Ihrer Anfrage — prüfen Sie zuerst die Server-Logs und den Betriebsstatus, bevor Sie Ihren Client-Code debuggen.
- Der Netzwerk-Tab in den Entwicklertools Ihres Browsers stellt Statuscodes für jede Anfrage farbcodiert dar. In Kombination mit dieser Referenz geht die Fehlersuche deutlich schneller.
FAQ
-i bei curl, oder geben Sie die Codenummer in das Nachschlage-Tool dieser Seite ein, um die Bedeutung zu sehen.
Übrigens – Eine kurze Geschichte der HTTP-Statuscodes
Das System der HTTP-Statuscodes wurde erstmals in RFC 1945 standardisiert, der 1996 veröffentlichten HTTP/1.0-Spezifikation. HTTP/1.1 (RFC 2616), veröffentlicht 1999, etablierte den Großteil des heute verwendeten Codesystems, einschließlich der 4xx- und 5xx-Familien, und wurde seither über RFC 7231 (2014) und RFC 9110 (2022) fortgeführt.
Der berühmte Scherzcode 418 I'm a teapot stammt aus einem Aprilscherz-RFC von 1998, das das fiktive "Hyper Text Coffee Pot Control Protocol" (HTCPCP) beschreibt. Der Code sollte zurückgegeben werden, wenn man eine Teekanne bat, Kaffee zu brühen.
Das Designprinzip, bei dem die führende Ziffer eine grobe Kategorie signalisiert, soll spätere Rückgabecode-Systeme in Protokollen wie SMTP und FTP beeinflusst haben. Die Einfachheit von "1xx = informativ, 2xx = Erfolg" ist seit fast drei Jahrzehnten praktisch unverändert geblieben.
451 Unavailable For Legal Reasons ist eine relativ neue Ergänzung, die 2015 formal in RFC 7725 standardisiert wurde. Die Zahl 451 wurde bewusst als Anspielung auf Ray Bradburys dystopischen Roman "Fahrenheit 451" gewählt, der sich um Zensur dreht.