HTTP-Statuscodes — Vollständige Referenz nach RFC 9110
Referenz aller HTTP-Statuscodes (1xx–5xx) nach RFC 9110 — Bedeutung, Einsatz und typische Fälle für APIs, SEO und Debugging.
HTTP-Statuscodes sind die Sprache zwischen Client und Server: Ein dreistelliger Code zeigt auf einen Blick, ob deine Anfrage erfolgreich war, weitergeleitet wurde oder gescheitert ist. Die fünf Klassen reichen von 1xx (Informationell) über 2xx (Erfolg) und 3xx (Weiterleitungen) bis 4xx (Client-Fehler) und 5xx (Server-Fehler). Diese Referenz deckt alle standardisierten Codes nach RFC 9110 ab – plus plattformspezifische Erweiterungen von Nginx, IIS und Cloudflare – und hilft dir beim API-Design, SEO-Monitoring und Debugging.
1xx — Informationell
100 Continue — Der Server hat die Anfrage-Header erhalten. Der Client kann den Body senden.
Client sends Expect: 100-continue header, server responds 100 before the body is sent.101 Switching Protocols — Der Server wechselt das Protokoll gemäß dem Upgrade-Header des Clients.
HTTP → WebSocket upgrade: client sends Upgrade: websocket, server responds 101.102 Processing (WebDAV) — Der Server hat die Anfrage empfangen und verarbeitet sie, aber es liegt noch keine Antwort vor.
Long-running WebDAV operation to prevent the client from timing out.103 Early Hints — Sendet vorläufige Antwort-Header vor der endgültigen Antwort. Wird zum Vorladen von Ressourcen genutzt.
Server sends Link: </style.css>; rel=preload so the browser can start loading assets early.2xx — Erfolg
200 OK — Die Anfrage war erfolgreich. Die Standardantwort für erfolgreiche HTTP-Requests.
GET /api/users → 200 with JSON body containing user list.201 Created — Die Anfrage war erfolgreich und eine neue Ressource wurde erstellt. Sollte einen Location-Header enthalten.
POST /api/users → 201 with Location: /api/users/42 header.202 Accepted — Die Anfrage wurde zur Verarbeitung akzeptiert, aber die Verarbeitung ist noch nicht abgeschlossen.
POST /api/reports/generate → 202 (report will be generated asynchronously).203 Non-Authoritative Information — Die Antwort kommt von einem transformierenden Proxy. Der ursprüngliche Server hat 200 zurückgegeben, der Proxy hat sie jedoch modifiziert.
A proxy modifies response headers or body before forwarding to the client.204 No Content — Die Anfrage war erfolgreich, aber es gibt keinen Inhalt zurückzugeben. Der Client soll nicht navigieren.
DELETE /api/users/42 → 204 (deleted successfully, no body needed).205 Reset Content — Die Anfrage war erfolgreich. Der Client soll die Dokumentansicht zurücksetzen (z. B. ein Formular leeren).
POST /api/form-submit → 205 (tells the browser to reset the form fields).206 Partial Content — Der Server liefert aufgrund eines Range-Headers des Clients nur einen Teil der Ressource zurück.
GET /video.mp4 with Range: bytes=0-1023 → 206 with the first 1024 bytes.207 Multi-Status (WebDAV) — Der Antwort-Body enthält Statusinformationen für mehrere Unter-Anfragen (XML-Body).
WebDAV PROPFIND on a collection returns 207 with per-resource status.208 Already Reported (WebDAV) — Mitglieder einer DAV-Bindung wurden bereits in einem früheren Teil der Antwort aufgelistet.
Avoids redundant enumeration of internal members in a WebDAV binding.226 IM Used — Der Server hat einen GET-Request mit Instance-Manipulationen an der aktuellen Instanz erfüllt.
Delta encoding: server returns the diff between the cached and current version.3xx — Weiterleitungen
300 Multiple Choices — Die Anfrage hat mehrere mögliche Antworten. Der Client soll eine davon auswählen.
A resource available in multiple formats (HTML, JSON, XML) with no preferred one.301 Moved Permanently — Die Ressource wurde dauerhaft an eine neue URL verschoben. Suchmaschinen aktualisieren ihre Links.
GET /old-page → 301 Location: /new-page (browsers and crawlers follow permanently).302 Found — Die Ressource befindet sich vorübergehend unter einer anderen URL. Der Client soll weiterhin die ursprüngliche URL verwenden.
GET /dashboard → 302 Location: /login (temporarily redirect to login page).303 See Other — Die Antwort zur Anfrage ist unter einer anderen URL per GET abrufbar. Wird häufig nach einem POST verwendet.
POST /api/orders → 303 Location: /api/orders/42 (redirect to the created resource via GET).304 Not Modified — Die Ressource hat sich seit der im If-Modified-Since- oder If-None-Match-Header angegebenen Version nicht geändert.
GET /style.css with If-None-Match: "abc" → 304 (use your cached version).305 Use Proxy (Deprecated) — Auf die angeforderte Ressource muss über den in Location angegebenen Proxy zugegriffen werden.
Deprecated due to security concerns. Not used in modern HTTP.307 Temporary Redirect — Wie 302, garantiert aber, dass die HTTP-Methode nicht geändert wird (POST bleibt POST).
POST /api/submit → 307 Location: /api/v2/submit (POST is preserved).308 Permanent Redirect — Wie 301, garantiert aber, dass die HTTP-Methode nicht geändert wird (POST bleibt POST).
POST /api/old-endpoint → 308 Location: /api/new-endpoint (permanent, method preserved).4xx — Client-Fehler (Allgemein)
400 Bad Request — Der Server kann die Anfrage aufgrund fehlerhafter Syntax oder ungültiger Parameter nicht verarbeiten.
POST /api/users with invalid JSON body → 400 {"error": "Invalid JSON"}.401 Unauthorized — Authentifizierung ist erforderlich und fehlgeschlagen oder wurde nicht angegeben.
GET /api/profile without an Authorization header → 401.402 Payment Required — Für zukünftige Verwendung reserviert. Manche APIs nutzen ihn, um auf eine erforderliche Zahlung oder ein fehlendes Abonnement hinzuweisen.
API rate limit exceeded on a paid plan → 402 (non-standard usage).403 Forbidden — Der Server hat die Anfrage verstanden, verweigert aber die Autorisierung. Authentifizierung hilft hier nicht.
GET /admin/settings as a non-admin user → 403 (authenticated but not permitted).404 Not Found — Die angeforderte Ressource konnte auf dem Server nicht gefunden werden.
GET /api/users/99999 → 404 (user does not exist).405 Method Not Allowed — Die HTTP-Methode wird für diese Ressource nicht unterstützt. Muss einen Allow-Header enthalten.
DELETE /api/users → 405 Allow: GET, POST (delete not supported on collection).406 Not Acceptable — Der Server kann keine Antwort erstellen, die den Accept-Headern des Clients entspricht.
GET /api/data with Accept: application/xml but server only supports JSON → 406.407 Proxy Authentication Required — Der Client muss sich beim Proxy authentifizieren, bevor die Anfrage fortgesetzt werden kann.
Request through a corporate proxy that requires credentials → 407.408 Request Timeout — Der Server hat zu lange auf den Client gewartet, bis die Anfrage vollständig gesendet wurde.
Client opens a connection but sends data too slowly → 408.409 Conflict — Die Anfrage steht im Konflikt mit dem aktuellen Zustand der Ressource.
PUT /api/users/42 with a stale ETag → 409 (concurrent modification conflict).4xx — Client-Fehler (Inhalt & Rate Limits)
410 Gone — Die Ressource existierte früher, wurde aber dauerhaft entfernt. Anders als 404 ist das beabsichtigt und permanent.
GET /api/v1/users → 410 (API v1 has been retired, use v2).411 Length Required — Der Server erfordert einen Content-Length-Header, der nicht angegeben wurde.
POST /api/upload without Content-Length → 411.412 Precondition Failed — Eine Vorbedingung im Anfrage-Header (If-Match, If-Unmodified-Since) wurde nicht erfüllt.
PUT /api/doc/42 with If-Match: "old-etag" but resource has changed → 412.413 Content Too Large — Der Anfrage-Body überschreitet das Größenlimit des Servers.
POST /api/upload with a 500MB file but server limit is 100MB → 413.414 URI Too Long — Die Anfrage-URI ist länger als der Server bereit ist zu verarbeiten.
GET request with extremely long query string exceeding server limits → 414.415 Unsupported Media Type — Der Media-Type des Anfrage-Bodys wird vom Server nicht unterstützt.
POST /api/users with Content-Type: text/plain but server requires application/json → 415.416 Range Not Satisfiable — Der Range-Header-Wert liegt außerhalb der Grenzen der Ressource.
GET /file.pdf with Range: bytes=9999999- but file is only 1MB → 416.417 Expectation Failed — Der Server kann die Anforderungen des Expect-Headers nicht erfüllen.
Client sends Expect: 100-continue but server doesn't support it → 417.418 I'm a Teapot (RFC 2324) — Aprilscherz aus dem Hyper Text Coffee Pot Control Protocol. In der Produktion nicht zu erwarten.
BREW /coffee on a teapot → 418 (the server refuses because it's a teapot).422 Unprocessable Content — Die Anfrage ist syntaktisch korrekt, aber semantisch ungültig. Häufig bei Validierungsfehlern.
POST /api/users with {"email": "not-an-email"} → 422 with validation errors.429 Too Many Requests — Der Client hat in einem bestimmten Zeitraum zu viele Anfragen gesendet (Rate Limiting).
API returns 429 with Retry-After: 60 header after exceeding 100 requests/minute.4xx — Client-Fehler (Sicherheit & Protokoll)
421 Misdirected Request — Die Anfrage wurde an einen Server gerichtet, der keine Antwort liefern kann (z. B. falsches TLS-Zertifikat).
HTTP/2 connection reuse to a server that doesn't handle the requested host → 421.423 Locked (WebDAV) — Die Ressource ist gesperrt und kann nicht geändert werden.
PUT /document.docx → 423 (file is locked by another user in WebDAV).424 Failed Dependency (WebDAV) — Die Anfrage ist fehlgeschlagen, weil sie von einer anderen Anfrage abhing, die ebenfalls fehlgeschlagen ist.
Batch WebDAV operation where a prerequisite step failed → 424.425 Too Early — Der Server verweigert die Verarbeitung einer Anfrage, die möglicherweise wiederholt werden könnte (TLS 1.3 Early Data Risiko).
Request sent in TLS 1.3 0-RTT early data that the server won't risk replaying → 425.426 Upgrade Required — Der Server verlangt, dass der Client auf ein anderes Protokoll wechselt.
Server requires TLS: responds 426 with Upgrade: TLS/1.3 header.428 Precondition Required — Der Server verlangt, dass die Anfrage konditional ist (z. B. If-Match-Header), um verlorene Updates zu verhindern.
PUT /api/doc without If-Match header → 428 (server enforces optimistic locking).431 Request Header Fields Too Large — Die Anfrage-Header sind zu groß für den Server.
Request with oversized cookies or too many headers → 431.451 Unavailable For Legal Reasons — Die Ressource ist aus rechtlichen Gründen nicht verfügbar (Zensur, Gerichtsbeschluss, DSGVO).
GET /blocked-content → 451 (content restricted by government order).5xx — Server-Fehler
500 Internal Server Error — Ein generischer serverseitiger Fehler. Der Server ist auf eine unerwartete Bedingung gestoßen.
Unhandled exception in application code → 500.501 Not Implemented — Der Server unterstützt die zur Erfüllung der Anfrage benötigte Funktionalität nicht.
PATCH /api/resource but the server has no PATCH handler → 501.502 Bad Gateway — Der als Gateway agierende Server hat eine ungültige Antwort vom vorgelagerten Server erhalten.
Nginx reverse proxy cannot reach the PHP-FPM backend → 502.503 Service Unavailable — Der Server ist vorübergehend nicht in der Lage, die Anfrage zu bearbeiten (überlastet oder in Wartung).
Server in maintenance mode → 503 with Retry-After: 3600 header.504 Gateway Timeout — Der als Gateway agierende Server hat keine rechtzeitige Antwort vom vorgelagerten Server erhalten.
Nginx proxy_read_timeout exceeded waiting for a slow backend → 504.505 HTTP Version Not Supported — Der Server unterstützt die in der Anfrage verwendete HTTP-Version nicht.
Client sends HTTP/3 request to a server that only supports HTTP/1.1 → 505.506 Variant Also Negotiates — Der Server hat einen internen Konfigurationsfehler bei der transparenten Inhaltsverhandlung.
Circular reference in content negotiation configuration → 506.507 Insufficient Storage (WebDAV) — Der Server kann die zur Erfüllung der Anfrage benötigte Darstellung nicht speichern.
WebDAV PUT when the server's disk is full → 507.508 Loop Detected (WebDAV) — Der Server hat bei der Verarbeitung der Anfrage eine Endlosschleife erkannt.
WebDAV PROPFIND encounters a circular symbolic link → 508.510 Not Extended — Der Server benötigt weitere Erweiterungen der Anfrage, um sie zu erfüllen.
Request lacks a required extension declaration → 510.511 Network Authentication Required — Der Client muss sich authentifizieren, um Netzwerkzugang zu erhalten (Captive Portal).
Public Wi-Fi hotspot intercepts requests and returns 511 with a login page.Inoffizielle & plattformspezifische Codes
440 Login Time-out (IIS) — Microsoft IIS: Die Sitzung des Clients ist abgelaufen, er muss sich neu anmelden.
IIS returns 440 when an authenticated session times out.444 No Response (Nginx) — Nginx schließt die Verbindung, ohne eine Antwort zu senden. Wird zum Blockieren bösartiger Anfragen genutzt.
Nginx config: return 444; to silently drop requests from bad bots.494 Request Header Too Large (Nginx) — Nginx: Der Anfrage-Header oder die URI ist zu groß zur Verarbeitung.
Client sends oversized cookies exceeding large_client_header_buffers → 494.495 SSL Certificate Error (Nginx) — Nginx: Die SSL-Zertifikats-Validierung des Clients ist fehlgeschlagen.
Client presents an expired or untrusted client certificate → 495.496 SSL Certificate Required (Nginx) — Nginx: Ein Client-Zertifikat ist erforderlich, wurde aber nicht angegeben.
Request to an endpoint requiring mTLS without a client certificate → 496.497 HTTP Request Sent to HTTPS Port (Nginx) — Nginx: Eine einfache HTTP-Anfrage wurde an einen HTTPS-only-Port gesendet.
Client sends http:// request to port 443 → 497.499 Client Closed Request (Nginx) — Nginx: Der Client hat die Verbindung geschlossen, bevor der Server eine Antwort senden konnte.
User navigates away or client times out before server finishes processing → 499.520 Web Server Returned an Unknown Error (Cloudflare) — Cloudflare: Der Origin-Server hat eine unerwartete oder leere Antwort zurückgegeben.
Origin sends an invalid HTTP response that Cloudflare cannot interpret → 520.521 Web Server Is Down (Cloudflare) — Cloudflare: Der Origin-Server hat die Verbindung verweigert.
Origin web server is not running or blocking Cloudflare IPs → 521.522 Connection Timed Out (Cloudflare) — Cloudflare: Die TCP-Verbindung zum Origin-Server ist abgelaufen.
Origin server is overloaded or a firewall is dropping packets → 522.523 Origin Is Unreachable (Cloudflare) — Cloudflare: Die DNS-Auflösung war erfolgreich, aber der Origin-Server ist nicht erreichbar.
DNS points to a server that is down or has no route → 523.524 A Timeout Occurred (Cloudflare) — Cloudflare: Die TCP-Verbindung wurde hergestellt, aber der Origin-Server hat nicht rechtzeitig geantwortet.
Origin accepts connection but a slow backend exceeds Cloudflare's 100s timeout → 524.525 SSL Handshake Failed (Cloudflare) — Cloudflare: Der SSL/TLS-Handshake mit dem Origin-Server ist fehlgeschlagen.
Origin has an expired certificate or SSL misconfiguration → 525.526 Invalid SSL Certificate (Cloudflare) — Cloudflare: Das SSL-Zertifikat des Origin-Servers kann nicht validiert werden.
Origin uses a self-signed certificate with Full (Strict) SSL mode → 526.530 (Cloudflare) — Cloudflare: Wird zusammen mit einem 1xxx-Fehler zurückgegeben. Weist normalerweise auf ein Cloudflare-spezifisches Problem hin.
Cloudflare returns 530 wrapping an internal 1020 (Access Denied) error. Fazit
HTTP-Statuscodes sind kein nettes Detail – sie sind das Rückgrat jeder Webkommunikation. Mit dieser Referenz findest du schnell den richtigen Code für dein API-Design, erkennst Fehlerquellen beim Debugging und verstehst, warum Suchmaschinen auf 301 und 404 anders reagieren als auf 200 und 410.
Weiterführende Links
- HTTP-Statuscodes — MDN Web Docs — alle Codes mit Beschreibungen und Kompatibilitätstabellen
- HTTP-Statuscode — Wikipedia — Übersicht und Geschichte
- RFC 9110 — HTTP Semantics — die normative Spezifikation (englisch)