HTTP-Statuscodes
Vollständige Referenz der HTTP-Antwort-Statuscodes mit Erklärungen und Anwendungsfällen.
HTTP-Statuscode-Kategorien
- 1xx (Informational) · Anfrage empfangen, Verarbeitung läuft.
- 2xx (Erfolg) · Anfrage erfolgreich empfangen, verstanden und akzeptiert.
- 3xx (Weiterleitung) · Weitere Aktion nötig, um die Anfrage abzuschließen.
- 4xx (Client-Fehler) · Anfrage enthält fehlerhafte Syntax oder kann nicht erfüllt werden.
- 5xx (Server-Fehler) · Server konnte eine gültige Anfrage nicht erfüllen.
Was ist der Unterschied zwischen 301 und 302?
301 Moved Permanently teilt Clients mit, dass die Ressource dauerhaft verschoben wurde (Suchmaschinen übertragen die Rankings. 302 Found ist eine temporäre Weiterleitung) die ursprüngliche URL behält ihr Ranking.
Wann sollte ich 401 vs. 403 verwenden?
401 Unauthorized bedeutet „nicht authentifiziert" (der Client sollte Anmeldedaten bereitstellen. 403 Forbidden bedeutet „authentifiziert, aber nicht erlaubt") Anmeldedaten helfen nicht.
Was bedeutet ein 418-Statuscode?
418 „I'm a teapot" ist ein Aprilscherz aus RFC 2324 (Hyper Text Coffee Pot Control Protocol). Es wird in der Praxis nicht verwendet, ist aber in der Entwickler-Kultur weithin bekannt.
Ein Standard mit drei Jahrzehnten Wandel
HTTP-Statuscodes haben mehrere Spezifikationsgenerationen durchlebt. RFC 1945 (Mai 1996) standardisierte HTTP/1.0 mit den grundlegenden 1xx- bis 5xx-Kategorien. RFC 2616 (Juni 1999) lieferte HTTP/1.1 und war über ein Jahrzehnt lang die kanonische Referenz. Die 7230-7235-Reihe (Juni 2014) teilte HTTP/1.1 nach Themen in mehrere Spezifikationen auf. Der aktuelle konsolidierte Standard ist RFC 9110 „HTTP Semantics“ (Juni 2022), der die 7230-7235-Aufteilung ablöst und das richtige Zitat für moderne Arbeit ist. Das vollständige Live-Register der zugewiesenen Codes finden Sie im HTTP-Statuscode-Register der IANA.
Die fünf Kategorien auf einen Blick
- 1xx Informational: vorläufige Antwort. Die Anfrage wurde empfangen, und der Server verarbeitet sie weiter. In der Praxis selten; nützlich für Protokoll-Upgrades und das moderne
103 Early Hints(das Servern erlaubt, kritische Ressourcen vorzuladen, bevor die vollständige Antwort bereit ist). - 2xx Success: die Anfrage wurde empfangen, verstanden und akzeptiert.
200 OKist der Alltagsfall;201 Createdfür die Erstellung einer Ressource;204 No Contentfür erfolgreiche Aktionen, bei denen nichts zurückzugeben ist. - 3xx Redirection: weitere Aktion erforderlich. Die klassischen Weiterleitungen (
301 Moved Permanently,302 Found,307 Temporary Redirect,308 Permanent Redirect) plus304 Not Modifiedfür die Cache-Validierung. - 4xx Client Error: der Client hat etwas falsch gemacht: fehlerhafte Syntax, fehlende Authentifizierung, Anfrage nach etwas, das nicht existiert. Die größte Kategorie im realen Datenverkehr.
- 5xx Server Error: der Server hat es vermasselt. Die Anfrage war gültig; der Server konnte sie nur nicht ausliefern. Das sind die, die Bereitschaftsingenieure aus dem Schlaf reißen.
Die „vs.“-Vergleiche, über die jeder stolpert
401 vs. 403. Das am häufigsten verwechselte Paar. 401 Unauthorized bedeutet „Sie haben sich nicht authentifiziert, versuchen Sie, sich anzumelden“ (der Name ist technisch irreführend, es geht um Authentifizierung, nicht um Autorisierung). 403 Forbidden bedeutet „Sie sind authentifiziert, dürfen diese Sache aber nicht tun“, Ihre Anmeldedaten sind gültig, gewähren aber keinen Zugriff auf diese Ressource. Ein häufiger Fehlgebrauch: 403 für nicht authentifizierte Anfragen zurückzugeben, wenn 401 mit einem WWW-Authenticate-Header korrekt ist.
301 vs. 302 vs. 307 vs. 308. Zwei Achsen, permanent vs. temporär, und das Verhalten zur Methodenerhaltung:
| Code | Permanent? | Methode erhalten? | SEO-Ranking-Signal |
|---|---|---|---|
| 301 Moved Permanently | Ja | Historisch änderten Clients POST → GET | Permanent, gibt Ranking an neue URL weiter |
| 302 Found | Nein | Historisch änderten Clients POST → GET | Temporär, ursprüngliche URL behält Ranking |
| 307 Temporary Redirect | Nein | Strikt, POST bleibt POST | Wie 302 |
| 308 Permanent Redirect | Ja | Strikt, POST bleibt POST | Wie 301 |
Wenn Sie GET-Anfragen zu SEO-Zwecken weiterleiten, ist 301 die übliche Wahl. Wenn Sie POST- oder PUT-Anfragen weiterleiten und die Methode erhalten möchten, brauchen Sie 307 oder 308.
400 vs. 422. 400 Bad Request ist für syntaktisch fehlerhafte Anfragen, ungültiges JSON, fehlende erforderliche Header, fehlerhafte Query-Parameter. 422 Unprocessable Entity (ursprünglich ein WebDAV-Code, von REST-APIs breit übernommen) ist für syntaktisch gültige Anfragen mit semantischen Problemen, das JSON parst korrekt, aber die Werte bestehen die fachliche Validierung nicht (negative Menge in einer Bestellung, E-Mail bereits in Verwendung). Viele APIs verwenden beide.
502 vs. 503 vs. 504. Drei verschiedene Upstream-Fehlermodi:
502 Bad Gateway: Der Proxy / das Gateway erhielt eine ungültige Antwort vom Upstream-Server.503 Service Unavailable: Der Server ist überlastet oder in Wartung. Oft kombiniert mit einemRetry-After-Header.504 Gateway Timeout: Der Upstream-Server antwortete nicht rechtzeitig.
404 vs. 410. 404 Not Found bedeutet „wir wissen nicht, ob das existiert oder nicht“. 410 Gone bedeutet „das hat einmal existiert, es ist dauerhaft entfernt“. SEO-Auswirkung: Google behandelt 410 als stärkeres Signal, dass Inhalt dauerhaft nicht verfügbar ist, und entfernt ihn schneller aus dem Index als bei 404.
REST-API-Konventionen
Moderne REST-APIs haben sich auf eine ziemlich einheitliche Reihe von Konventionen geeinigt, welche Statuscodes für welche Aktionen stehen:
| Methode | Erfolgsfall | Häufige Fehler |
|---|---|---|
| GET | 200 OK mit Body oder 304 Not Modified, falls zwischengespeichert | 404, falls Ressource fehlt, 403, falls verboten |
| POST (erstellen) | 201 Created mit Location-Header, der auf die neue Ressource zeigt | 400 bei fehlerhaftem Body, 422 bei Validierungsfehlern, 409 bei Konflikten |
| PUT (ersetzen) / PATCH (aktualisieren) | 200 OK mit aktualisiertem Body oder 204 No Content | 404, falls Ressource fehlt, 409 bei Versionskonflikten |
| DELETE | 204 No Content (oder 200 mit Löschbestätigung) | 404, falls fehlend |
| Beliebig (ratenbegrenzt) | - | 429 Too Many Requests mit Retry-After-Header |
| Beliebig (Authentifizierung) | - | 401, falls keine Authentifizierung, 403, falls authentifiziert, aber nicht berechtigt |
SEO-Auswirkungen
200 OK: Google indexiert die Seite normal.301 Moved Permanently: Google aktualisiert die indexierte URL auf die neue und überträgt Ranking-Signale.302 Found/307 Temporary Redirect: Google behält die ursprüngliche URL im Index; das Ranking bleibt beim Original.308 Permanent Redirect: Google behandelt es wie 301: Das Ranking wird übertragen.304 Not Modified: vom Googlebot für bedingte Anfragen verwendet; signalisiert, dass zwischengespeicherter Inhalt wiederverwendet werden kann.404 Not Found: Google entfernt die URL nach einigen Crawls aus seinem Index.410 Gone: Google entfernt die URL schneller als bei404; das stärkere Signal „dauerhaft verschwunden“.503 Service UnavailablemitRetry-After: sagt dem Googlebot, später wiederzukommen. Verwenden Sie es während Wartungsfenstern; vermeiden Sie503für echte Fehler (Google interpretiert anhaltende 503er als Anweisung, nicht zu crawlen).5xxanhaltend: Google verringert die Crawl-Rate und entfernt die URL möglicherweise irgendwann ganz aus dem Index.
Berühmte & kulturelle Codes
418 I'm a teapot: ein Aprilscherz aus RFC 2324 (Hyper Text Coffee Pot Control Protocol, 1. April 1998). Als die IETF 2017 vorschlug, ihn aus der Spezifikation zu streichen, hielt ihn die Kampagne „Save 418“ erfolgreich in den Büchern. Manche APIs verwenden ihn als Markierung im Sinne von „das ist nicht echt“; ansonsten harmlos.451 Unavailable For Legal Reasons: RFC 7725 (2015), benannt nach Ray Bradburys Fahrenheit 451. Wird zurückgegeben, wenn Inhalt durch Gerichtsbeschluss oder behördliche Anordnung zensiert wird.- Cloudflares 520-527-Reihe: nicht standardisiert, von Cloudflare verwendet, um spezifische Verbindungsfehler zum Upstream-Server anzuzeigen. Verbreitet, wenn eine Website hinter Cloudflare Probleme hat.
- Nginx'
444 No Response: Nginx-spezifisch, wird zurückgegeben, wenn der Server die Verbindung schließt, ohne eine Antwort zu senden. - Twitters historisches
420 Enhance Your Calm: ein inzwischen entfernter Ratenbegrenzungs-Code, der von Twitters früherer API verwendet wurde; ersetzt durch das standardisierte429.
Häufige Fehler
200 OKfür Fehler mit einem Fehler-Body verwenden.{"error": "not found"}mit einem 200-Status zurückzugeben, verwirrt jede Caching-Schicht, jedes Monitoring-Werkzeug und jedes Client-SDK. Verwenden Sie den richtigen Statuscode.403für nicht authentifizierte Anfragen zurückgeben. Der richtige Code ist401mit einemWWW-Authenticate-Header.302verwenden, wenn Sie301meinen. Wenn der Umzug dauerhaft ist, brauchen Suchmaschinen das301, um das Ranking zu übertragen.302behält die alte URL im Index.301oder302für POST/PUT-Weiterleitungen verwenden. Historisch erlaubten diese es Clients, die Methode auf GET zu ändern.307und308erhalten die ursprüngliche Methode strikt.500zurückgeben, wenn503gemeint ist. Wenn der Server überlastet oder in Wartung ist, ist503mitRetry-Afterdas korrekte Signal, sowohl für Clients als auch für den Googlebot.404für dauerhaft entfernte Seiten verwenden.410 Goneist das stärkere Signal und wird schneller aus Suchmaschinen-Indizes entfernt.- Den
Location-Header bei201- und3xx-Antworten vergessen. DerLocation-Header ist das, was dem Client sagt, wo die neue Ressource liegt oder wohin weitergeleitet werden soll. Ohne ihn können Clients nicht navigieren.
Weitere häufig gestellte Fragen
Wann sollte ich 422 statt 400 zurückgeben?
400 Bad Request bedeutet, dass die Anfrage selbst fehlerhaft ist, ungültiges JSON, fehlende erforderliche Header, fehlerhafte Query-Parameter. 422 Unprocessable Entity bedeutet, dass die Anfrage wohlgeformt ist, aber semantische Fehler enthält, die die Verarbeitung verhindern, ein Mengenfeld mit einer negativen Zahl, eine bereits verwendete E-Mail-Adresse, ein Datum in der Vergangenheit für ein Feld, das nur Zukunft erlaubt. Moderne REST-API-Konventionen haben sich auf diese Aufteilung geeinigt, wobei die meisten großen APIs (GitHub, Stripe, Twilio) 422 für Validierungsfehler verwenden.
Warum gibt Cloudflare manchmal 520, 521, 522… zurück?
Die 520-527-Codes sind Cloudflare-spezifisch und signalisieren verschiedene Arten, wie deren Edge Ihren Origin-Server nicht erreichen konnte. 520 ist das generische „Webserver gab einen unbekannten Fehler zurück“; 521 bedeutet, Ihr Origin hat die Verbindung verweigert; 522 ist ein Verbindungs-Timeout zu Ihrem Origin; 524 bedeutet, Ihr Origin brauchte zu lange für eine Antwort. Sie sind nicht im IANA-Register, werden aber häufig angetroffen, wenn Websites hinter Cloudflare Backend-Probleme haben.
Zeigt mir mein Browser, welchen Code meine API zurückgegeben hat?
Ja, öffnen Sie die DevTools → Tab „Network“, klicken Sie auf die Anfrage und schauen Sie in die Spalte „Status“. Browser zeigen für manche Codes auch generische Seiten an (das Dinosaurierspiel bei Verbindungsfehlern in Chrome, die Standard-Seiten für 404 / 500); aber der tatsächliche numerische Code steht immer in der Antwort.
Was ist 103 Early Hints?
Ein relativ neuer (RFC 8297, 2017) 1xx-Code, der dem Server erlaubt, Link: rel=preload-Header zu senden, bevor die vollständige Antwort bereit ist, und dem Browser sagt, kritische Ressourcen (CSS, Schriften, Bilder) früh zu laden. Inzwischen von Chrome unterstützt und von Cloudflare, Fastly und anderen CDNs als Performance-Optimierung ausgeliefert.
Kann ich mir einen eigenen Statuscode ausdenken?
Technisch ja (HTTP erlaubt jeden 3-stelligen Code im Bereich 100-599. Praktisch nein), Clients, Proxys und Caches behandeln unbekannte Codes anhand ihrer ersten Ziffer (also 4xx = generisch Client-Fehler, 5xx = Server-Fehler). Manche Anbieter tun das (Cloudflares 520er, Nginx' 444), aber solange Sie nicht beide Enden der Leitung kontrollieren, halten Sie sich an das IANA-Register. Ein 299 zu erfinden, bricht zwar nichts, vermittelt aber auch nichts.
Warum heißt der „Statuscode“ ein „Status“ und nicht ein „Fehlercode“?
Weil die meisten von ihnen keine Fehler sind. 200 OK ist der am häufigsten zurückgegebene Statuscode der Welt, er bedeutet „alles ist gut gegangen“. Die Codes vermitteln den Status der Anfrage: Erfolg, Weiterleitung, Client-Fehler, Server-Fehler. Sie „Fehlercodes“ zu nennen, betont einseitig die negativen Fälle, die protokolliert und bemerkt werden; die Erfolgscodes erledigen ihre Arbeit stillschweigend jede Mikrosekunde.