HTTP-Statuscodes — vollständige Liste mit Bedeutung und Beispielen
Alle offiziellen HTTP-Statuscodes von 100 bis 511 plus Codes von nginx, Cloudflare und AWS, jeweils mit Einsatzzweck.
1xx Information
100Continue
Zwischenantwort: Der Server hat die Request-Header erhalten, und der Client soll den Body senden.
Wird von Servern automatisch gesendet, wenn ein Client vor dem Upload eines großen Bodys „Expect: 100-continue“ mitschickt, damit er keine Bandbreite für eine Anfrage verschwendet, die abgelehnt würde.
Sende ihn nicht aus Anwendungscode als finalen Status; er ist nie die Antwort auf eine Anfrage, nur ein Schritt vor der eigentlichen.
Nicht zutreffend
PUT /upload HTTP/1.1 Content-Length: 104857600 Expect: 100-continue HTTP/1.1 100 Continue
101Switching Protocols
Der Server stimmt zu, die Verbindung auf das im Upgrade-Header genannte Protokoll umzustellen.
Die Handshake-Antwort für WebSocket-Verbindungen (Upgrade: websocket) und früher für Upgrades von HTTP/1.1 auf h2c.
HTTP/2 und HTTP/3 verwenden ihn nicht; WebSockets über HTTP/2 nutzen stattdessen die erweiterte CONNECT-Methode (RFC 8441).
Nicht zutreffend
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
102ProcessingVeraltet
Zwischenantwort, die dem Client mitteilt, dass der Server noch an einer langen WebDAV-Anfrage arbeitet, damit kein Timeout eintritt.
WebDAV. In RFC 4918 aus WebDAV entfernt, aber weiterhin im IANA-Register.
Nur in älteren WebDAV-Servern bei langsamen rekursiven Vorgängen wie einem tiefen COPY oder MOVE.
Neue APIs sollten für lang laufende Aufgaben stattdessen 202 Accepted mit einer Status-URL zurückgeben.
Nicht zutreffend
HTTP/1.1 102 Processing
103Early Hints
Zwischenantwort mit Link-Headern, damit der Browser mit Preload oder Preconnect beginnen kann, während der Server die finale Antwort noch vorbereitet.
Wenn das Erzeugen des HTML Zeit braucht (serverseitiges Rendering, Datenbankabfragen) und du weißt, welche CSS-Dateien, Schriften oder Origins die Seite braucht. Chromium-Browser und Firefox reagieren auf Preload- und Preconnect-Hinweise in 103-Antworten, Safari auf Preconnect.
Setze keine Header hinein, die nur für die finale Antwort gelten dürfen, etwa Set-Cookie; Browser ignorieren die meisten Header in 103.
Nicht zutreffend
HTTP/1.1 103 Early Hints Link: </style.css>; rel=preload; as=style Link: <https://cdn.example.com>; rel=preconnect HTTP/1.1 200 OK Content-Type: text/html
104Upload Resumption Supported
Zwischenantwort, die dem Client mitteilt, dass der begonnene Upload später fortgesetzt werden kann, und wo.
Vorläufige IANA-Registrierung für den IETF-Entwurf zu fortsetzbaren Uploads; noch kein finaler RFC.
Experimentell: Server, die den Entwurf zu fortsetzbaren Uploads umsetzen, senden ihn mit einem Location-Header für die Upload-Ressource.
Nicht für den allgemeinen Einsatz, bis der Entwurf als RFC veröffentlicht ist; die meisten Clients und Proxys kennen ihn nicht.
Nicht zutreffend
draft-ietf-httpbis-resumable-upload
HTTP/1.1 104 Upload Resumption Supported Upload-Draft-Interop-Version: 6 Location: https://example.com/upload/b530ce8ff
2xx Erfolg
200OKStandardmäßig cachebar
Die Anfrage war erfolgreich. Was der Body enthält, hängt von der Methode ab: bei GET die Ressource, bei POST das Ergebnis der Aktion.
Die normale Erfolgsantwort für GET sowie für POST, PUT, PATCH oder DELETE, wenn du einen Body mit dem Ergebnis zurückgibst.
Gib nicht 200 mit einer Fehlermeldung im Body zurück („Soft Errors“). Clients, Monitoring, Caches und Suchmaschinen lesen den Statuscode, nicht dein JSON.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 200 OK
Content-Type: application/json
{"id": 42, "name": "Ada"}201Created
Die Anfrage war erfolgreich und hat eine oder mehrere neue Ressourcen erstellt.
Nach einem POST (oder einem PUT auf eine neue URL), der etwas anlegt. Füge einen Location-Header hinzu, der auf die neue Ressource zeigt; der Body beschreibt sie meist.
Verwende ihn nicht, wenn nichts Neues erstellt wurde, etwa bei der Aktualisierung eines bestehenden Datensatzes (nimm 200 oder 204).
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 201 Created
Location: /users/42
Content-Type: application/json
{"id": 42}202Accepted
Die Anfrage wurde zur Verarbeitung angenommen, die Verarbeitung ist aber noch nicht abgeschlossen und kann noch fehlschlagen.
Eingereihte oder asynchrone Aufgaben: Videokodierung, Berichterstellung, Massenimporte. Gib einen Link zurück, unter dem der Client den Jobstatus prüfen kann.
Verwende ihn nicht als „Erfolg“ für synchrone Aufgaben; er verspricht ausdrücklich nichts über das Ergebnis.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 202 Accepted
Location: /jobs/7f3a
Content-Type: application/json
{"status": "queued"}203Non-Authoritative InformationStandardmäßig cachebar
Erfolg, aber ein transformierender Proxy hat die 200-Antwort des Ursprungsservers verändert.
Nur von Zwischenstationen, die Inhalte verändern, etwa ein Proxy, der Bilder komprimiert oder HTML umschreibt, um dem Client mitzuteilen, dass es nicht exakt die Antwort des Ursprungsservers ist.
Ursprungsserver und APIs sollten ihn nicht senden.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 203 Non-Authoritative Information Content-Type: image/webp
204No ContentStandardmäßig cachebar
Erfolg, und es gibt absichtlich keinen Body.
Erfolgreiches DELETE, PUT oder PATCH, wenn du die aktualisierte Ressource nicht zurückgibst, automatisches Speichern eines Formulars oder eine CORS-Preflight-Antwort.
Füge nie einen Body hinzu; Clients lesen ihn nicht, und bei HTTP/1.1 beschädigt ein überzähliger Body die nächste Antwort auf der Verbindung. Nimm 200, wenn du etwas zurückzugeben hast.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 204 No Content
205Reset Content
Erfolg; der Client soll die Dokumentansicht zurücksetzen, zum Beispiel das abgeschickte Formular leeren.
Eingabeoberflächen, bei denen der Benutzer ein Formular absendet und sofort den nächsten Datensatz eingibt.
Browser setzen das Zurücksetzen nicht um, in der Praxis verhält er sich also wie 204. Darf keinen Body enthalten.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 205 Reset Content
206Partial ContentStandardmäßig cachebar
Der Server gibt nur den oder die Byte-Bereiche zurück, die der Client mit einem Range-Header angefordert hat.
Spulen in Video und Audio, fortsetzbare Downloads und Download-Manager, die eine Datei in parallelen Teilen laden. Füge Content-Range hinzu.
Sende ihn nur, wenn die Anfrage einen Range-Header hatte, den du berücksichtigst. Wenn du Range ignorierst, sende 200 mit dem vollständigen Body.
Standardmäßig cachebar (heuristisch cachebar)
GET /video.mp4 HTTP/1.1 Range: bytes=0-1023 HTTP/1.1 206 Partial Content Content-Range: bytes 0-1023/146515 Content-Length: 1024
207Multi-Status
Der Body (XML) enthält für jede von mehreren Ressourcen einen eigenen Status.
WebDAV
WebDAV-Vorgänge wie PROPFIND, die viele Ressourcen betreffen. Manche JSON-APIs übernehmen ihn für Batch-Endpunkte.
Bei Batch-APIs bevorzugen viele Teams 200 mit Ergebnissen pro Element, da generische Clients 207 als einfachen Erfolg behandeln.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 207 Multi-Status Content-Type: application/xml; charset="utf-8"
208Already Reported
Wird innerhalb einer 207-Antwort verwendet, um anzugeben, dass eine Ressource bereits weiter oben aufgeführt wurde und daher nicht wiederholt wird (verhindert Schleifen mit Bindings).
WebDAV
WebDAV-Server, die Bindings unterstützen (RFC 5842).
Außerhalb von WebDAV als eigenständige Antwort nicht sinnvoll.
Nur mit explizitem Cache-Control oder Expires cachebar
<D:status>HTTP/1.1 208 Already Reported</D:status>
226IM Used
Der Server hat ein GET mit einem Delta (Instance Manipulation) beantwortet, das auf die aktuelle Ressource angewendet wurde, statt die vollständige Ressource zu senden.
Delta-Kodierung für HTTP (A-IM- / IM-Header). Selten im Einsatz.
Von Browsern nicht unterstützt; verwende ihn nicht in gewöhnlichen APIs.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 226 IM Used IM: vcdiff ETag: "v2"
3xx Umleitung
300Multiple ChoicesStandardmäßig cachebar
Die Ressource hat mehrere Darstellungen, und der Client (oder Benutzer) soll eine auswählen.
Selten: agentengesteuerte Content Negotiation, etwa ein Dokument in mehreren Sprachen oder Formaten mit Links zu jeder Variante.
Browser wählen nicht automatisch. Für die Auswahl von Sprache oder Format funktioniert serverseitige Negotiation oder eine normale Seite mit Links besser.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 300 Multiple Choices Link: </doc.en.html>; rel=alternate; hreflang=en Link: </doc.fr.html>; rel=alternate; hreflang=fr
301Moved PermanentlyStandardmäßig cachebar
Die Ressource hat eine neue dauerhafte URL, angegeben im Location-Header.
Domainumzüge, HTTP zu HTTPS, geänderte Slugs, Zusammenführen doppelter URLs. Suchmaschinen übertragen Ranking-Signale auf die neue URL.
Browser können beim Folgen eines 301 POST in GET ändern. Wenn die Methode erhalten bleiben muss (ein umgezogener API-Endpunkt), nimm 308. Browser cachen 301-Antworten aggressiv, also teste vor dem Deployment.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 301 Moved Permanently Location: https://www.example.com/new-page
302Found
Die Ressource befindet sich vorübergehend unter einer anderen URL; nutze künftig weiter die ursprüngliche URL.
Temporäre Umleitungen: Login-Weiterleitungen, A/B-Tests, Wartungsseiten, Weiterleitungen nach Region oder Sprache.
Browser ändern beim Folgen eines 302 POST in GET (historisches Verhalten, das der RFC erlaubt). Nimm 303 für „sieh dir das Ergebnis an“ nach einem POST und 307, wenn die Methode erhalten bleiben muss.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 302 Found Location: /login?next=%2Faccount
303See Other
Leitet den Client auf eine andere URL um, die er mit GET abrufen muss.
Das Post/Redirect/Get-Muster: Sende nach einem Formular-POST 303 auf die Ergebnisseite, damit ein Neuladen der Seite das Formular nicht erneut absendet.
Nicht für umgezogene Inhalte; er sagt nichts darüber aus, ob die ursprüngliche URL umgezogen ist.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 303 See Other Location: /orders/1234
304Not Modified
Antwort auf ein bedingtes GET oder HEAD (If-None-Match oder If-Modified-Since): Die gecachte Kopie des Clients ist weiterhin gültig.
Cache-Revalidierung: wird selbst nicht gespeichert, frischt aber die gecachte Antwort auf, die der Client bereits hat.
Automatisch von Servern und CDNs, wenn ETag oder Last-Modified-Datum übereinstimmen; so entfällt die Übertragung eines unveränderten Bodys.
Sende nie einen Body. Sende ihn nicht auf eine Anfrage, die nicht bedingt war; der Client hat dann nichts, was er wiederverwenden kann.
Nicht zutreffend
GET /app.js HTTP/1.1 If-None-Match: "33a64df5" HTTP/1.1 304 Not Modified ETag: "33a64df5" Cache-Control: max-age=3600
305Use ProxyVeraltet
Veraltet. Forderte den Client früher auf, die Anfrage über einen in Location genannten Proxy zu wiederholen.
Nichts. Er wurde aus Sicherheitsgründen für veraltet erklärt, und Browser ignorieren ihn.
Sende ihn nicht.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 305 Use Proxy
306(Unused)Veraltet
Reserviert. Wurde in einem Entwurf für „Switch Proxy“ verwendet und ist nicht mehr in Gebrauch.
Nichts.
Sende ihn nicht.
Nicht zutreffend
307Temporary Redirect
Temporäre Umleitung, bei der der Client die Anfrage mit derselben Methode und demselben Body wiederholen muss.
Vorübergehendes Umleiten von POST-, PUT- oder DELETE-Anfragen (ein API-Endpunkt ist wegen Wartung umgezogen). Browser zeigen außerdem einen internen 307, wenn HSTS HTTPS erzwingt.
Für einen dauerhaften Umzug nimm 308. Für „hol das Ergebnis per GET“ nimm 303.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 307 Temporary Redirect Location: https://api2.example.com/v1/orders
308Permanent RedirectStandardmäßig cachebar
Dauerhafte Umleitung, bei der der Client die Anfrage mit derselben Methode und demselben Body wiederholen muss.
Ein dauerhaft umgezogener API-Endpunkt, der POST oder PUT empfängt. Suchmaschinen behandeln ihn wie 301. Next.js und Vercel verwenden standardmäßig 308 für dauerhafte Umleitungen.
Sehr alte Clients (Internet Explorer unter Windows 7 und älter) verstehen ihn nicht; für einfache Seitenumzüge ist 301 genauso gut.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 308 Permanent Redirect Location: https://example.com/api/v2/upload
4xx Client-Fehler
400Bad Request
Der Server verarbeitet die Anfrage wegen eines Client-Fehlers nicht: fehlerhafte Syntax, ungültiges Framing oder ungültige Parameter.
Nicht parsbares JSON, ein fehlender Pflichtparameter, ein Wert vom falschen Typ. Erkläre das Problem im Body (RFC 9457 problem+json ist ein gutes Format).
Für wohlgeformte Eingaben, die an Geschäftsregeln scheitern, verwenden viele APIs 422. Für Authentifizierungsprobleme nimm 401 oder 403.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
{"title": "Invalid JSON", "detail": "Unexpected token } at position 41"}401Unauthorized
Der Anfrage fehlen gültige Anmeldedaten. Trotz des Namens bedeutet er „nicht authentifiziert“.
Kein Token, ein abgelaufenes Token oder ein falsches Passwort. Die Antwort muss einen WWW-Authenticate-Header enthalten, der beschreibt, wie man sich authentifiziert.
Wenn der Benutzer angemeldet ist, aber keine Berechtigung hat, nimm 403. Sende 401 nicht ohne WWW-Authenticate.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 401 Unauthorized WWW-Authenticate: Bearer realm="api", error="invalid_token"
402Payment Required
Für künftige Verwendung reserviert. Es gibt keine standardisierte Bedeutung.
Manche APIs verwenden ihn für „Kontingent aufgebraucht, upgrade deinen Tarif“ oder eine fehlgeschlagene Zahlung (Stripe gibt 402 bei abgelehnten Kartenzahlungen zurück).
Verlass dich nicht darauf, dass Clients ihn verstehen; beschreibe das Problem im Body.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 402 Payment Required
Content-Type: application/json
{"error": "card_declined"}403Forbidden
Der Server hat die Anfrage verstanden und weiß, wer du bist (oder es ist ihm egal), verweigert aber die Ausführung.
Dem angemeldeten Benutzer fehlt die Berechtigung, eine IP ist gesperrt, Verzeichnisauflistung ist deaktiviert oder eine WAF-Regel hat gegriffen. Erneutes Anmelden hilft nicht.
Wenn Anmeldedaten fehlen oder ungültig sind, nimm 401. Wenn schon die Information, dass die Ressource existiert, ein Leck wäre, gib stattdessen 404 zurück.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 403 Forbidden
Content-Type: application/json
{"error": "You do not have access to this project"}404Not FoundStandardmäßig cachebar
Der Server hat für die URL keine aktuelle Darstellung oder will nicht verraten, ob es eine gibt.
Unbekannte URLs, gelöschte Datensätze, wenn du Löschungen nicht nachverfolgst, oder das Verbergen von Ressourcen vor unberechtigten Benutzern.
Wenn die Ressource existiert hat und endgültig weg ist, sagt 410 das ausdrücklich. Gib keine 200-Seite zurück, auf der „nicht gefunden“ steht (ein Soft 404).
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 404 Not Found Content-Type: text/html
405Method Not AllowedStandardmäßig cachebar
Die URL existiert, unterstützt aber diese HTTP-Methode nicht.
Ein DELETE auf eine schreibgeschützte Ressource oder ein POST auf eine Seite, die nur GET kennt. Die Antwort muss einen Allow-Header mit den unterstützten Methoden enthalten.
Verwende ihn nicht für Berechtigungsprobleme (403) oder für Methoden, die der Server überhaupt nicht implementiert (501).
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 405 Method Not Allowed Allow: GET, HEAD
406Not Acceptable
Der Server kann keine Antwort erzeugen, die zu den Headern Accept, Accept-Language oder Accept-Encoding der Anfrage passt.
Eine API, die nur JSON spricht, erhält „Accept: application/xml“ ohne Fallback.
Die meisten Server ignorieren nicht passende Accept-Header und senden stattdessen ihr Standardformat, was meist freundlicher ist.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 406 Not Acceptable
Content-Type: application/json
{"supported": ["application/json"]}407Proxy Authentication Required
Wie 401, aber der Client muss sich beim dazwischenliegenden Proxy authentifizieren.
Wird von Forward-Proxys (Unternehmens-Proxys) mit einem Proxy-Authenticate-Header gesendet.
Ursprungsserver sollten ihn nie senden.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 407 Proxy Authentication Required Proxy-Authenticate: Basic realm="corp-proxy"
408Request Timeout
Der Server hat in der Zeit, die er zu warten bereit war, keine vollständige Anfrage erhalten und schließt die Verbindung.
Wird von Servern bei inaktiven Keep-alive-Verbindungen oder langsamen Uploads gesendet. Clients können die Anfrage über eine neue Verbindung wiederholen.
Nicht für langsame Backend-Verarbeitung; das ist ein 504 an einem Gateway oder einfach eine langsame Antwort. Sende „Connection: close“ mit.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 408 Request Timeout Connection: close
409Conflict
Die Anfrage steht im Konflikt mit dem aktuellen Zustand der Ressource.
Anlegen eines Benutzers, dessen E-Mail-Adresse schon existiert, Bearbeiten eines Datensatzes, den jemand anderes geändert hat (Versionskonflikt), Löschen eines nicht leeren Ordners.
Für fehlgeschlagene If-Match- / If-Unmodified-Since-Bedingungen nimm 412. Für Validierungsfehler nimm 400 oder 422.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 409 Conflict
Content-Type: application/json
{"error": "Email already registered"}410GoneStandardmäßig cachebar
Die Ressource gab es hier früher, sie ist dauerhaft weg und hat keine Weiterleitungsadresse.
Eingestellte Produkte, abgelaufene Aktionen, gelöschte Konten, eingestellte API-Versionen. Google behandelt 404 und 410 fast gleich, ein 410 wird aber eventuell etwas früher aus dem Index entfernt.
Wenn der Inhalt umgezogen ist, leite stattdessen mit 301 um. Wenn du nicht sicher bist, ob es endgültig ist, nimm 404.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 410 Gone
411Length Required
Der Server verlangt bei dieser Anfrage einen Content-Length-Header.
Server, die Chunked-Uploads ablehnen und die Body-Größe vorab kennen müssen.
Wird von Anwendungen selten gebraucht; meist sendet ihn der Webserver selbst.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 411 Length Required
412Precondition Failed
Eine Bedingung in den Request-Headern (If-Match, If-Unmodified-Since, If-None-Match bei einem Schreibvorgang) war falsch.
Optimistische Nebenläufigkeit: Der Client hat If-Match mit einem alten ETag gesendet, jemand anderes hat die Ressource also zuerst geändert.
Verwende ihn nicht für Verstöße gegen Geschäftsregeln, die nichts mit bedingten Headern zu tun haben (409 oder 422).
Nur mit explizitem Cache-Control oder Expires cachebar
PUT /docs/7 HTTP/1.1 If-Match: "v3" HTTP/1.1 412 Precondition Failed ETag: "v4"
413Content Too Large
Der Request-Body ist größer, als der Server verarbeiten will. Hieß vor RFC 9110 „Payload Too Large“.
Uploads über dem Limit (nginx client_max_body_size, eine API-Obergrenze von 10 MB). Wenn das Limit vorübergehend ist, füge Retry-After hinzu.
Für eine zu lange URL nimm 414, für zu große Header 431.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 413 Content Too Large Connection: close
414URI Too LongStandardmäßig cachebar
Das Anfrageziel (URL) ist länger, als der Server interpretieren will.
Riesige Query-Strings, oft ein GET-Formular, das ein POST sein sollte, oder eine Umleitungsschleife, die ständig Parameter anhängt.
Verlege große Eingaben in einen Request-Body (POST), statt das Limit immer weiter zu erhöhen.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 414 URI Too Long
415Unsupported Media Type
Der Server lehnt die Anfrage ab, weil das Format des Bodys (Content-Type oder Content-Encoding) nicht unterstützt wird.
Ein Endpunkt, der JSON akzeptiert, erhält Formulardaten oder XML, oder der Content-Type-Header fehlt. Füge Accept-Post oder Accept-Patch hinzu, um zu zeigen, was unterstützt wird.
Nicht für einen Body im richtigen Format mit ungültigem Inhalt (400 oder 422).
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 415 Unsupported Media Type Accept-Post: application/json
416Range Not Satisfiable
Keiner der Byte-Bereiche im Range-Header überschneidet sich mit der Ressource, etwa wenn Bytes hinter dem Dateiende angefordert werden.
Fortgesetzte Downloads, bei denen die Datei kleiner geworden ist oder der Client über ihr Ende hinaus anfragt. Füge Content-Range: bytes */<length> hinzu.
Server dürfen einen ungültigen Range auch einfach ignorieren und 200 mit dem vollständigen Body zurückgeben.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 416 Range Not Satisfiable Content-Range: bytes */47022
417Expectation Failed
Der Server kann die Anforderung im Expect-Header der Anfrage nicht erfüllen.
Ein Client hat „Expect: 100-continue“ an einen Server oder Proxy gesendet, der das nicht unterstützt, oder eine unbekannte Erwartung angegeben.
Clients, die ihn erhalten, sollten es ohne Expect-Header erneut versuchen.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 417 Expectation Failed
418(Unused)
Von RFC 9110 reserviert, weil 418 als Scherzcode „I’m a teapot“ weit verbreitet war; er hat in HTTP keine definierte Bedeutung.
Reserviert. Berühmt als „I’m a teapot“ aus dem Aprilscherz-RFC 2324 (HTCPCP) von 1998.
Nur als Easter Egg. Manche Dienste nutzen ihn, um Anfragen, die sie ablehnen wollen, mit Humor zu beantworten.
Verwende ihn nicht für echte Fehler; ihm kann keine Bedeutung zugewiesen werden, und Clients wissen nicht, was zu tun ist.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 418 I'm a teapot
419Page ExpiredInoffiziell · Laravel
Laravel gibt ihn zurück, wenn das CSRF-Token fehlt oder abgelaufen ist, meist nachdem eine Sitzung auf einer Seite mit Formular abgelaufen ist.
Wird von Laravels CSRF-Middleware gesendet. Abhilfe: Seite neu laden, @csrf in Formulare einfügen oder bei AJAX-Anfragen den Header X-CSRF-TOKEN mitsenden.
Kein Standardcode; sende ihn nicht aus APIs, die nicht auf Laravel basieren.
Nicht zutreffend
Laravel (nicht im IANA-Register)
HTTP/1.1 419 unknown status
420Enhance Your CalmInoffiziell · Twitter (Legacy)
Die Ratenlimit-Antwort der alten Twitter-API, ersetzt durch den Standardcode 429.
Nichts Neues. Du triffst ihn eventuell noch in alten Client-Bibliotheken. Spring definierte früher 420 „Method Failure“, inzwischen veraltet.
Nimm 429 für Rate Limiting.
Nicht zutreffend
Twitter API v1 (nicht im IANA-Register)
HTTP/1.1 420 Enhance Your Calm
421Misdirected Request
Die Anfrage hat einen Server erreicht, der für diesen Host und dieses Schema keine Antwort erzeugen kann.
HTTP/2-Connection-Coalescing ist schiefgegangen: Der Browser hat eine Verbindung für einen anderen Hostnamen wiederverwendet, der vom selben Zertifikat abgedeckt ist, den der Server aber nicht bedient. Der Client sollte es über eine neue Verbindung erneut versuchen.
Nicht für gewöhnliche unbekannte Hostnamen auf einem einzelnen Server; das ist meist ein 404 oder der Standard-Virtual-Host.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/2 421
422Unprocessable Content
Die Anfrage ist wohlgeformt und in einem unterstützten Format, aber ihr Inhalt besteht die Validierung nicht. Heißt in RFC 4918 „Unprocessable Entity“.
Validierungsfehler in Formularen und APIs: eine E-Mail-Adresse, die keine ist, ein Enddatum vor dem Startdatum. Rails, Laravel und FastAPI verwenden ihn standardmäßig.
Für fehlerhafte Syntax (nicht parsbares JSON) nimm 400.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 422 Unprocessable Content
Content-Type: application/json
{"errors": {"email": ["is invalid"]}}423Locked
Die Ressource ist gesperrt, daher kann die Anfrage sie nicht ändern.
WebDAV
WebDAV-LOCK-Semantik. Manche APIs nutzen ihn für Datensätze, die gerade von jemand anderem bearbeitet werden, oder für Konten, die nach fehlgeschlagenen Logins gesperrt sind.
Außerhalb von WebDAV verstehen generische Clients 409 besser.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 423 Locked
424Failed Dependency
Die Aktion ist fehlgeschlagen, weil eine andere Aktion, von der sie abhing, fehlgeschlagen ist.
WebDAV
In einem WebDAV-PROPPATCH oder einer Batch-Anfrage für Elemente, die nicht versucht wurden, weil ein früheres Element fehlgeschlagen ist.
Nicht für Ausfälle vorgelagerter Dienste; das sind 502 oder 503.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 424 Failed Dependency
425Too Early
Der Server verarbeitet eine Anfrage nicht, die in TLS-1.3-Early-Data (0-RTT) gesendet wurde, weil sie wiederholt eingespielt werden könnte.
CDNs und Server, die 0-RTT akzeptieren, aber nicht idempotente Anfragen (POST) in Early Data ablehnen. Der Client versucht es nach Abschluss des Handshakes erneut.
Kein allgemeiner „später versuchen“-Code; nimm dafür 503 mit Retry-After.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 425 Too Early
426Upgrade Required
Der Server lehnt die Anfrage mit dem aktuellen Protokoll ab, würde sie aber nach einem im Upgrade-Header genannten Upgrade annehmen.
TLS oder ein neueres Protokoll wird verlangt, oder ein WebSocket-Endpunkt erhält eine einfache HTTP-Anfrage. Muss einen Upgrade-Header enthalten.
Für HTTP zu HTTPS auf Websites ist eine 301- oder 308-Umleitung plus HSTS der übliche Weg.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 426 Upgrade Required Upgrade: TLS/1.3, HTTP/1.1 Connection: Upgrade
428Precondition Required
Der Server verlangt, dass die Anfrage bedingt ist (If-Match usw.), um verlorene Aktualisierungen zu verhindern.
APIs, die darauf bestehen, dass Clients vor einem PUT, PATCH oder DELETE If-Match mit dem zuletzt gesehenen ETag senden.
Nimm 412, wenn eine Vorbedingung gesendet wurde und fehlgeschlagen ist; 428 ist für den Fall, dass keine gesendet wurde.
Darf von Caches nicht gespeichert werden
HTTP/1.1 428 Precondition Required
Content-Type: application/json
{"error": "Send If-Match with the current ETag"}429Too Many Requests
Der Client hat in einem bestimmten Zeitraum zu viele Anfragen gesendet (Rate Limiting).
API-Ratenlimits, Login-Drosselung, Schutz vor Scraping. Füge Retry-After hinzu, damit sich gut programmierte Clients an die Wartezeit halten können; RateLimit-Header helfen ebenfalls.
Für einen Server, der für alle überlastet ist, nimm 503. Googlebot behandelt 429 wie 503 und verlangsamt das Crawling.
Darf von Caches nicht gespeichert werden
HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json
{"error": "Rate limit exceeded: 100 requests per minute"}431Request Header Fields Too Large
Die Header sind einzeln oder zusammen zu groß für den Server.
Meist übergroße Cookies, die sich auf einer Domain angesammelt haben, oder riesige Authorization-Tokens. Cookies löschen behebt es für Benutzer oft.
Für eine lange URL nimm 414, für einen großen Body 413.
Darf von Caches nicht gespeichert werden
HTTP/1.1 431 Request Header Fields Too Large
440Login Time-outInoffiziell · Microsoft IIS / Exchange
Die Sitzung des Clients ist abgelaufen, und er muss sich erneut anmelden (Outlook Web Access und andere IIS-Anwendungen).
In Exchange/OWA-Umgebungen zu sehen.
Nimm in deinen eigenen Anwendungen 401 für abgelaufene Sitzungen.
Nicht zutreffend
Microsoft IIS (nicht im IANA-Register)
HTTP/1.1 440 Login Time-out
444No ResponseInoffiziell · nginx
nginx-interner Code: „return 444;“ schließt die Verbindung, ohne überhaupt eine Antwort zu senden.
Verwerfen von Anfragen durch Scanner, von Anfragen mit unbekanntem Host-Header in einem Default-Server-Block oder von missbräuchlichen Clients. Er erscheint in den nginx-Logs; der Client sieht eine leere Antwort.
Der Client erhält nie einen 444, im Client-Code muss er also nicht behandelt werden.
Nicht zutreffend
nginx (nicht im IANA-Register)
server {
listen 80 default_server;
return 444;
}449Retry WithInoffiziell · Microsoft
Microsoft-Erweiterung: Die Anfrage soll wiederholt werden, nachdem der Client eine bestimmte Aktion ausgeführt hat.
In einigen Microsoft-Diensten zu sehen (Exchange ActiveSync; Azure Cosmos DB verwendet 449 für wiederholbare Schreibkonflikte).
Nicht standardisiert; nimm in deinen eigenen APIs 409 oder 503 mit Retry-After.
Nicht zutreffend
Microsoft IIS (nicht im IANA-Register)
HTTP/1.1 449 Retry With
450Blocked by Windows Parental ControlsInoffiziell · Microsoft
Der Jugendschutz von Windows hat den Zugriff auf die Seite blockiert.
Wird auf Windows-Systemen mit aktiviertem Jugendschutz erzeugt.
Nicht von Servern senden.
Nicht zutreffend
Microsoft (nicht im IANA-Register)
HTTP/1.1 450 Blocked by Windows Parental Controls
451Unavailable For Legal ReasonsStandardmäßig cachebar
Der Zugriff wird aufgrund einer rechtlichen Anforderung verweigert: Gerichtsbeschluss, staatliche Zensur oder Geoblocking aus rechtlichen Gründen.
In einem Rechtsraum gesperrte Inhalte (Sanktionen, DSGVO-bedingte Geoblocks, Löschanordnungen). Ein Link-Header mit rel="blocked-by" kann nennen, wer die Sperre verhängt hat.
Nicht für gewöhnliche verweigerte Berechtigungen (403) oder für Inhalte, die du einfach entfernt hast (410).
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 451 Unavailable For Legal Reasons Link: <https://authority.example/>; rel="blocked-by"
460Client closed connection (AWS ELB)Inoffiziell · AWS Application Load Balancer
Wird von einem AWS ALB protokolliert, wenn der Client die Verbindung vor Ablauf des Idle-Timeouts geschlossen hat.
In ALB-Zugriffslogs zu sehen; meist ein Client mit kürzerem Timeout als die Verarbeitungszeit des Ziels.
Wird nicht an Clients gesendet.
Nicht zutreffend
AWS Elastic Load Balancing (nicht im IANA-Register)
elb_status_code=460
463Too many IPs in X-Forwarded-For (AWS ELB)Inoffiziell · AWS Application Load Balancer
Der ALB hat einen X-Forwarded-For-Header mit mehr als 30 IP-Adressen erhalten.
Meist eine Proxy-Schleife, die ständig Adressen anhängt.
Nicht für den Einsatz in Anwendungen.
Nicht zutreffend
AWS Elastic Load Balancing (nicht im IANA-Register)
HTTP/1.1 463
494Request Header Too LargeInoffiziell · nginx
nginx-interner Code für Header, die large_client_header_buffers überschreiten; der Client erhält einen 400.
Erscheint in nginx-Logs und in der error_page-Konfiguration.
Der Standardcode ist 431.
Nicht zutreffend
nginx (nicht im IANA-Register)
error_page 494 /header-too-large.html;
495SSL Certificate ErrorInoffiziell · nginx
nginx-intern: Der Client hat ein ungültiges Client-Zertifikat vorgelegt (Mutual TLS). Wird an den Client als 400 gesendet.
Eigene Fehlerseiten für mTLS-Fehler.
Kein Statuscode, der tatsächlich übertragen wird.
Nicht zutreffend
nginx (nicht im IANA-Register)
error_page 495 /bad-client-cert.html;
496SSL Certificate RequiredInoffiziell · nginx
nginx-intern: Ein Client-Zertifikat war erforderlich, wurde aber nicht vorgelegt. Wird an den Client als 400 gesendet.
Eigene Fehlerseiten, wenn ssl_verify_client aktiviert ist.
Kein Statuscode, der tatsächlich übertragen wird.
Nicht zutreffend
nginx (nicht im IANA-Register)
error_page 496 /client-cert-required.html;
497HTTP Request Sent to HTTPS PortInoffiziell · nginx
nginx-intern: Eine einfache HTTP-Anfrage ist auf einem Port eingegangen, der TLS erwartet. Wird an den Client als 400 gesendet.
Ein gängiger Trick ist „error_page 497 =301 https://$host$request_uri;“, um solche Anfragen auf HTTPS umzuleiten.
Kein Statuscode, der tatsächlich übertragen wird.
Nicht zutreffend
nginx (nicht im IANA-Register)
error_page 497 =301 https://$host:$server_port$request_uri;
498Invalid TokenInoffiziell · Esri ArcGIS Server
ArcGIS gibt ihn bei einem abgelaufenen oder anderweitig ungültigen Token zurück.
Nur relevant beim Aufruf von ArcGIS-Diensten.
Nimm in deinen eigenen APIs 401 für ungültige Tokens.
Nicht zutreffend
Esri ArcGIS (nicht im IANA-Register)
HTTP/1.1 498 Invalid Token
499Client Closed RequestInoffiziell · nginx
nginx protokolliert 499, wenn der Client die Verbindung geschlossen hat, bevor nginx eine Antwort gesendet hat.
In Zugriffslogs zu sehen: Benutzer, die die Seite verlassen, mobile Clients mit Timeout oder ein Load Balancer vor nginx mit kürzerem Timeout. Viele 499 auf einem Endpunkt bedeuten meist, dass er zu langsam ist.
Der Client erhält ihn nie. Esri verwendet 499 außerdem für „Token Required“.
Nicht zutreffend
nginx (nicht im IANA-Register)
203.0.113.9 - - [16/Oct/2026:10:12:01 +0000] "GET /report HTTP/1.1" 499 0
5xx Server-Fehler
500Internal Server Error
Der Server ist auf einen unerwarteten Zustand gestoßen, der ihn daran gehindert hat, die Anfrage zu erfüllen.
Unbehandelte Exceptions und Bugs. Er ist der generische Fallback, wenn kein spezifischerer 5xx-Code zutrifft.
Verwende ihn nicht für Fehler des Clients (4xx). Gib in der Produktion keine Stacktraces im Body preis; protokolliere sie stattdessen.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 500 Internal Server Error
Content-Type: application/problem+json
{"title": "Internal Server Error", "traceId": "4bf92f35"}501Not ImplementedStandardmäßig cachebar
Der Server unterstützt die benötigte Funktionalität nicht, typischerweise eine HTTP-Methode, die er überhaupt nicht kennt.
Eine Anfrage mit einer unbekannten Methode (z. B. eine WebDAV-Methode auf einem einfachen Webserver) oder eine Funktion, die der Server bewusst noch nicht umgesetzt hat.
Wenn die Methode bekannt, auf dieser URL aber nicht erlaubt ist, nimm 405.
Standardmäßig cachebar (heuristisch cachebar)
HTTP/1.1 501 Not Implemented
502Bad Gateway
Ein Gateway oder Proxy hat vom vorgelagerten Server eine ungültige Antwort erhalten.
Wird von Reverse-Proxys und Load Balancern (nginx, Cloudflare, AWS ALB) gesendet, wenn der App-Server abgestürzt ist, die Verbindung geschlossen oder Unsinn zurückgegeben hat.
Anwendungscode muss ihn selten senden, außer API-Gateways, die einen anderen Dienst aufrufen, der fehlgeschlagen ist.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 502 Bad Gateway Server: nginx
503Service Unavailable
Der Server kann die Anfrage gerade nicht bearbeiten: überlastet oder wegen Wartung nicht verfügbar. Voraussichtlich vorübergehend.
Geplante Wartung, Lastabwurf, Ausfall einer Abhängigkeit. Füge Retry-After hinzu. Suchmaschinen behalten die Seite bei kurzen 503-Phasen im Index, anders als bei einer Wartungsseite mit 200 oder einem 404.
Lass eine Website nicht tagelang auf 503; Google entfernt URLs, die ihn dauerhaft zurückgeben, irgendwann aus dem Index.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 503 Service Unavailable Retry-After: 3600
504Gateway Timeout
Ein Gateway oder Proxy hat vom vorgelagerten Server nicht rechtzeitig eine Antwort erhalten.
Wird von Proxys und Load Balancern gesendet, wenn die Anwendung länger braucht als das Proxy-Timeout (nginx proxy_read_timeout ist standardmäßig 60 Sekunden).
Bei langen Aufgaben erhöhe nicht einfach die Timeouts; gib 202 zurück und verarbeite asynchron.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 504 Gateway Timeout Server: awselb/2.0
505HTTP Version Not Supported
Der Server unterstützt die in der Anfrage verwendete HTTP-Hauptversion nicht.
Ein Server erhält eine Protokollversion, die er nicht sprechen kann.
Selten zu sehen; Clients handeln HTTP/2 und HTTP/3 über ALPN und Alt-Svc aus, nicht durch Ausprobieren.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 505 HTTP Version Not Supported
506Variant Also Negotiates
Fehler in der Serverkonfiguration: Die gewählte Variante ist selbst für Negotiation eingerichtet, wodurch eine Schleife entsteht.
Transparente Content Negotiation (experimentell)
Nur Server, die die transparente Content Negotiation nach RFC 2295 umsetzen.
Nicht für Anwendungsfehler.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 506 Variant Also Negotiates
507Insufficient Storage
Der Server kann nicht speichern, was zur Erfüllung der Anfrage nötig ist.
WebDAV
WebDAV- oder Dateispeicher-APIs, wenn die Festplatte oder das Kontingent des Benutzers voll ist.
Für einen einzelnen Upload, der ein Größenlimit überschreitet, ist 413 klarer.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 507 Insufficient Storage
508Loop Detected
Der Server hat einen Vorgang abgebrochen, weil er eine Endlosschleife gefunden hat (WebDAV-Bindings mit Depth: infinity).
WebDAV
WebDAV-Server. Shared Hosts auf Basis von CloudLinux senden 508 außerdem als „Resource Limit Is Reached“, wenn ein Konto seine Limits erreicht – das ist nicht standardkonform.
Nicht für Umleitungsschleifen; die sind ein clientseitiger Fehler, den der Browser selbst meldet.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 508 Loop Detected
509Bandwidth Limit ExceededInoffiziell · Apache bw_mod / cPanel
Das Hosting-Konto hat sein Bandbreitenkontingent überschritten.
Control Panels von Shared-Hosting-Anbietern.
Nimm in deinen eigenen Systemen 503 oder 429.
Nicht zutreffend
Apache / cPanel (nicht im IANA-Register)
HTTP/1.1 509 Bandwidth Limit Exceeded
510Not ExtendedVeraltet
Die Anfrage hat die Richtlinie für den Zugriff auf die Ressource gemäß HTTP Extension Framework nicht erfüllt.
Im IANA-Register als obsolet markiert: RFC 2774 wurde auf Historic gesetzt.
Nichts Aktuelles; das Extension Framework wurde nie breit umgesetzt.
Sende ihn nicht.
Nur mit explizitem Cache-Control oder Expires cachebar
HTTP/1.1 510 Not Extended
511Network Authentication Required
Der Client muss sich authentifizieren, um Netzwerkzugang zu erhalten: ein Captive Portal.
WLAN-Portale in Hotels, Flughäfen und Cafés, die den Datenverkehr abfangen, bis sich der Benutzer anmeldet oder die Bedingungen akzeptiert.
Ursprungsserver dürfen ihn nie senden; er ist nur für abfangende Netzwerk-Proxys gedacht.
Darf von Caches nicht gespeichert werden
HTTP/1.1 511 Network Authentication Required Content-Type: text/html <meta http-equiv="refresh" content="0; url=https://login.example.net/">
520Web Server Returned an Unknown ErrorInoffiziell · Cloudflare
Der Ursprungsserver hat Cloudflare eine leere, unbekannte oder unerwartete Antwort geliefert.
Prüfe die Logs des Ursprungsservers: Abstürze, Verbindungsabbrüche, Header über dem Cloudflare-Limit oder eine leere Antwort.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 520 server: cloudflare
521Web Server Is DownInoffiziell · Cloudflare
Cloudflare konnte keine Verbindung zum Ursprungsserver herstellen: Die Verbindung wurde abgelehnt.
Der Webserver am Ursprung ist gestoppt, oder eine Firewall blockiert die IP-Bereiche von Cloudflare.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 521 server: cloudflare
522Connection Timed OutInoffiziell · Cloudflare
Bei Cloudflare ist beim Aufbau einer TCP-Verbindung zum Ursprungsserver ein Timeout aufgetreten.
Ursprungsserver überlastet, Pakete von einer Firewall verworfen oder eine falsche Ursprungs-IP im DNS.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 522 server: cloudflare
523Origin Is UnreachableInoffiziell · Cloudflare
Cloudflare erreicht den Ursprungsserver überhaupt nicht, typischerweise ein Routing-Problem oder ein falscher DNS-Eintrag.
Prüfe, ob die DNS-Einträge A/AAAA auf die richtige, erreichbare IP zeigen.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 523 server: cloudflare
524A Timeout OccurredInoffiziell · Cloudflare
Cloudflare hat sich mit dem Ursprungsserver verbunden, aber dieser hat innerhalb des Timeouts (standardmäßig 100 Sekunden) keine HTTP-Antwort gesendet.
Lang laufende Anfragen: Verlagere die Arbeit in einen Hintergrundjob und frage den Status ab, oder streame den Fortschritt.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 524 server: cloudflare
525SSL Handshake FailedInoffiziell · Cloudflare
Der TLS-Handshake zwischen Cloudflare und dem Ursprungsserver ist fehlgeschlagen.
Der Ursprungsserver lauscht nicht auf 443, hat kein Zertifikat, keine gemeinsamen Cipher-Suites oder SNI ist nicht konfiguriert, während der SSL-Modus Full oder Full (strict) ist.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 525 server: cloudflare
526Invalid SSL CertificateInoffiziell · Cloudflare
Im Modus Full (strict) konnte Cloudflare das Zertifikat des Ursprungsservers nicht validieren: abgelaufen, selbstsigniert oder falscher Hostname.
Installiere auf dem Ursprungsserver ein gültiges Zertifikat oder ein Cloudflare-Origin-CA-Zertifikat.
Nur Cloudflare sendet ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 526 server: cloudflare
527Railgun ErrorInoffiziell · Cloudflare (eingestellt)Veraltet
Verbindungsproblem zwischen Cloudflare und einem Railgun-Listener am Ursprungsserver. Cloudflare hat Railgun eingestellt.
Nur noch historisch.
Nur Cloudflare hat ihn gesendet.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/1.1 527 Railgun Error
530Origin DNS / 1xxx errorInoffiziell · Cloudflare
Wird mit einer Cloudflare-Fehlerseite 1xxx zurückgegeben (etwa 1016 Origin DNS error); der auf der Seite angezeigte 1xxx-Code ist die eigentliche Ursache.
Schlag die 1xxx-Fehlernummer nach, die auf der Seite angezeigt wird.
Nur CDNs und Hoster senden ihn.
Nicht zutreffend
Cloudflare (nicht im IANA-Register)
HTTP/2 530 server: cloudflare
561Unauthorized (AWS ELB)Inoffiziell · AWS Application Load Balancer
Die integrierte Authentifizierung des ALB (OIDC oder Cognito) ist beim Identitätsanbieter fehlgeschlagen.
Prüfe die IdP-Konfiguration der Listener-Regel des ALB.
Nicht für den Einsatz in Anwendungen.
Nicht zutreffend
AWS Elastic Load Balancing (nicht im IANA-Register)
HTTP/1.1 561
598Network Read Timeout ErrorInoffiziell · Einige HTTP-Proxys
Wird von einigen Proxys verwendet, um ein Lese-Timeout hinter dem Proxy zu signalisieren.
Selten; er kann bei bestimmten Proxy-Produkten auftauchen.
Nimm 504.
Nicht zutreffend
Informal convention (nicht im IANA-Register)
HTTP/1.1 598
599Network Connect Timeout ErrorInoffiziell · Einige HTTP-Proxys und -Clients
Wird von einigen Proxys und Client-Bibliotheken (etwa dem HTTP-Client von Tornado) für ein Verbindungs-Timeout verwendet.
Selten.
Nimm 504 für Proxys.
Nicht zutreffend
Informal convention (nicht im IANA-Register)
HTTP/1.1 599
Eine statische Referenz, die in deinem Browser läuft; deine Suchen werden nirgendwohin gesendet. Alle kostenlosen Tools ansehen.
Ein Problem gefunden oder etwas, das besser sein könnte? Wir lesen jede Nachricht und beheben Fehler schnell.
Diese Liste der HTTP-Statuscodes umfasst jeden Code im IANA-Register, von 100 Continue bis 511 Network Authentication Required, mit Bedeutung, Einsatzzweck, wann man ihn nicht verwenden sollte, ob Caches ihn speichern dürfen, und dem RFC-Abschnitt, der ihn definiert. Tippe eine Nummer, eine Klasse wie 4xx oder ein Wort wie „redirect“ oder „rate limit“ ein, um zu filtern, und verlinke direkt auf jeden Code mit einem Anker wie #404 oder #503.
Die offiziellen Einträge folgen RFC 9110 (2022), der RFC 7231 ersetzt und einige Codes umbenannt hat: 413 heißt jetzt Content Too Large und 422 Unprocessable Content. Codes, die du in Logs siehst, aber nicht im Register findest, wie nginx 499 oder Cloudflare 522, sind ebenfalls enthalten und als inoffiziell markiert, zusammen mit dem System, das sie sendet. Es ist ein Nachschlagewerk, kein Monitoring: Es ruft keine URLs ab und prüft nicht, welchen Status eine Live-Website zurückgibt.
So funktioniert’s
- Tippe einen Code (503), eine Klasse (4xx) oder ein Stichwort (timeout, redirect, cache) ins Suchfeld. Die Ergebnisse filtern sich beim Tippen.
- Mit den Klassen-Schaltflächen siehst du nur 1xx-, 2xx-, 3xx-, 4xx- oder 5xx-Codes; entferne das Häkchen bei „Inoffizielle Codes einbeziehen“, um herstellerspezifische auszublenden.
- Klicke auf einen Code, um ihn aufzuklappen: Bedeutung, Einsatzzweck, wann nicht, Caching-Verhalten, der definierende RFC und eine Beispielantwort.
- Mit „Link zu diesem Code kopieren“ teilst du einen direkten Link wie /tools/http-status-codes#429.
Häufige Fragen
Was ist der Unterschied zwischen 401 und 403?
401 Unauthorized bedeutet, dass die Anfrage keine gültigen Anmeldedaten hat: Der Client ist nicht angemeldet, oder das Token ist abgelaufen. Der Server muss einen WWW-Authenticate-Header senden, der angibt, wie man sich authentifiziert. 403 Forbidden bedeutet, dass der Server weiß, wer der Client ist (oder es nicht wissen muss), und trotzdem ablehnt; erneutes Anmelden hilft nicht. Kurz gesagt: 401 heißt „Wer bist du?“ und 403 „Ich weiß es, und nein.“
Sollte ich für eine permanente Weiterleitung 301 oder 308 verwenden?
Beide sind permanent, und beide geben Ranking-Signale bei Google weiter. Der Unterschied liegt in der Methode: Bei einer 301 dürfen Browser aus einem POST ein GET machen, während 308 verlangt, dass der Client dieselbe Methode und denselben Body wiederholt. Für normale Seitenumzüge reicht 301; für einen API-Endpunkt, der POST oder PUT empfängt, nimm 308. Dasselbe Paar gibt es für temporäre Weiterleitungen: 302 darf die Methode ändern, 307 nicht.
Was bedeutet 499 in nginx-Logs?
499 Client Closed Request ist ein reiner nginx-Code. Er wird protokolliert, wenn der Client die Verbindung geschlossen hat, bevor nginx eine Antwort gesendet hat – der Client erhält also nie tatsächlich eine 499. Vereinzelte 499er sind Nutzer, die wegnavigieren; viele an einem Endpunkt bedeuten meist, dass er zu langsam ist und Clients oder ein vorgelagerter Load Balancer zuerst in einen Timeout laufen.
Was ist der Unterschied zwischen 502, 503 und 504?
Alle drei kommen von einem Server, der vor einem anderen sitzt. 502 Bad Gateway bedeutet, dass der Proxy von der Upstream-App eine ungültige Antwort oder eine abgebrochene Verbindung erhalten hat. 503 Service Unavailable bedeutet, dass der Server vorübergehend keine Anfragen bearbeiten kann, meist wegen Überlastung oder Wartung, und sollte Retry-After enthalten. 504 Gateway Timeout bedeutet, dass der Proxy das Warten auf die Antwort des Upstreams aufgegeben hat.
Ist 418 I'm a teapot ein echter Statuscode?
Er begann als Aprilscherz in RFC 2324 (1998) und wurde von so viel Software umgesetzt, dass RFC 9110 die 418 inzwischen als „(Unused)“ führt: reserviert, damit sie nie eine echte Bedeutung bekommt. Für echte Probleme solltest du sie nicht senden, als Easter Egg kannst du sie aber bedenkenlos behalten.
Welche Statuscodes dürfen standardmäßig gecacht werden?
RFC 9110 nennt 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414 und 501 als heuristisch cachebar – ein Cache darf sie also auch ohne Cache-Control oder Expires speichern. RFC 7725 ergänzt 451. Andere Codes, darunter 302 und 307, werden nur gecacht, wenn die Antwort explizite Frische-Informationen enthält, und laut RFC 6585 dürfen 428, 429, 431 und 511 überhaupt nicht gespeichert werden.
Die fünf Klassen auf einen Blick
• 1xx Informational: Zwischenantworten vor der endgültigen. Du hast selten direkt mit ihnen zu tun; 101 (WebSocket-Upgrade) und 103 (Early Hints) sind die, die in der Praxis zählen.
• 2xx Success: Die Anfrage hat funktioniert. 200 für eine normale Antwort, 201, wenn etwas erstellt wurde (mit Location-Header), 204, wenn es bewusst keinen Body gibt.
• 3xx Redirection: Der Client muss woanders nachsehen. 301/308 für permanente Umzüge, 302/307 für temporäre, 303 nach einem Formular-POST, 304, wenn die gecachte Kopie noch gültig ist.
• 4xx Client Error: Die Anfrage ist fehlerhaft, und eine unveränderte Wiederholung schlägt wieder fehl. 400 fehlerhaft aufgebaut, 401 nicht authentifiziert, 403 nicht erlaubt, 404 nicht gefunden, 409 Konflikt, 422 Validierung fehlgeschlagen, 429 Rate Limit erreicht.
• 5xx Server Error: Die Anfrage ist womöglich in Ordnung, aber der Server hat versagt. 500 ist ein Bug, 502/504 sind Fehler zwischen Proxy und Upstream, 503 ist vorübergehende Nichtverfügbarkeit.
Den richtigen Code in einer API wählen
Gib den spezifischsten Code zurück, mit dem ein generischer Client etwas anfangen kann, und pack die Details in den Body. Ein HTTP-Client mit Wiederholungslogik, ein CDN oder ein Monitoring-System weiß, was 429 und 503 bedeuten, ohne dein JSON zu lesen, kann aber eine 200 mit {"error": true} nicht deuten. RFC 9457 (Problem Details) definiert eine Standard-JSON-Struktur für Fehler-Bodies.
Eine praktische Zuordnung für die meisten JSON-APIs: 400 für nicht parsebare Eingaben, 422 für wohlgeformte Eingaben, die die Validierung nicht bestehen, 401, wenn das Token fehlt oder abgelaufen ist, 403, wenn dem Nutzer die Berechtigung fehlt, 404 für unbekannte IDs (auch, um Ressourcen zu verbergen, die ein Nutzer nicht sehen darf), 409 für Duplikate und Versionskonflikte, 412, wenn ein If-Match-ETag veraltet ist, 429 mit Retry-After für Rate Limits und 503 mit Retry-After für geplante Ausfallzeiten.
Erfinde keine neuen Nummern. Clients behandeln einen unbekannten Code wie das x00 seiner Klasse (ein unbekannter 4xx wird wie 400 behandelt), ein eigener Code 461 bringt dir also nichts gegenüber 400 plus einer klaren Meldung.
Statuscodes und SEO
Suchmaschinen nehmen Statuscodes wörtlich. Eine 301 oder 308 überträgt die Signale der alten URL auf die neue; eine 302 oder 307 sagt Google, dass die alte URL im Index bleiben soll. 404 und 410 entfernen eine Seite beide mit der Zeit aus dem Index. Eine 200-Seite, auf der „nicht gefunden“ steht, ist ein Soft 404, den Google erkennt und in der Search Console meldet. Bei Wartungsarbeiten erhält ein kurzer Zeitraum mit 503 und Retry-After die Rankings, während eine 200-Seite mit „Wir sind gleich zurück“ deinen Inhalt in den Suchergebnissen ersetzen kann. Außerdem verlangsamt der Googlebot seine Crawling-Rate, wenn er 429, 500 oder 503 sieht.
Ähnliche kostenlose Tools
- User-Agent-Parser — Sieh deinen eigenen User-Agent und deine Client Hints oder zerlege einen beliebigen UA-String in Browser, Engine, Betriebssystem, Gerät und CPU. Stapelmodus mit CSV.
- JSON Formatter — JSON formatieren, minifizieren und validieren, Parse-Fehler mit Zeile und Spalte. Im Browser, ohne Upload.
- Docker Run ⇄ Compose — Mach aus einem docker-run-Befehl einen Service in einer docker-compose.yml – oder aus einem Compose-Service wieder docker run.
- Regex-Tester — Teste einen regulären Ausdruck an Beispieltext mit Live-Hervorhebung der Treffer, Capture Groups und Vorschau fürs Ersetzen. Kostenlos, im Browser.