Zum Inhalt springen
OneKitly

HTTP-Statuscodes erklärt: die, die wirklich verwechselt werden

Veröffentlicht am 29.4.2026 · 7 Min. Lesezeit · Entwickler-Tools

Daniel Okonkwo

Daniel OkonkwoFront-end-Entwickler und Tech-Redakteur bei OneKitly

Web-Performance · Dateiformate

Anhand von 2 Quellen geprüft

Profil ansehen
Kurz gesagt

Die erste Ziffer ist der Teil, den jeder Client, Cache und Crawler liest: 1xx informativ, 2xx Erfolg, 3xx Umleitung, 4xx die Anfrage war schuld, 5xx der Server. Darin sind dies die Unterschiede, die das Verhalten ändern. 308 ist ein 301 mit der Zusicherung, dass Methode und Body die Umleitung überstehen, und 307 ist ein 302 mit derselben Zusicherung — ältere Clients machen aus einem umgeleiteten POST bei 301 und 302 ein GET, und genau dafür gibt es 307 und 308. 401 heißt, die Anfrage trug keine gültigen Anmeldedaten und muss einen WWW-Authenticate-Header mitbringen; 403 heißt, die Anmeldedaten waren in Ordnung und die Aktion wird trotzdem verweigert, erneutes Anmelden hilft also nicht. 404 sagt, hier ist nichts, ohne sich auf einen Grund festzulegen; 410 sagt, die Ressource wurde absichtlich entfernt und kommt nicht wieder, und ist standardmäßig cachebar. Bei 429 und 503 ist Retry-After eine Schätzung, die der Server in Sekunden oder als HTTP-Datum veröffentlicht — ein Hinweis für gutwillige Clients, keine Zusage, pünktlich zurück zu sein.

301 gegen 308, 302 gegen 307, 401 gegen 403, 404 gegen 410 — dazu, was Retry-After bei einem 429 oder 503 wirklich zusagt. Die Paare, bei denen der falsche Code das Verhalten ändert und nicht nur die Formulierung.

Die erste Ziffer ist der einzige Teil, den manche Clients lesen

RFC 9110 verlangt, dass ein Client die Klasse eines Statuscodes versteht, auch wenn er den Code selbst nicht kennt, und Unbekanntes wie den x00 seiner Klasse behandelt. Ein Client, der 451 nie gesehen hat, behandelt ihn als 400; ein unbekannter 599 gilt als 500. Diese Regel macht den Raum erweiterbar, und sie bedeutet auch, dass die Klasse fast das gesamte Verhalten trägt: Caches entscheiden daran über Speicherbarkeit, Proxys über Wiederholungen, Crawler über Indexierung — meist bevor irgendetwas aus deinem Antwort-Body gelesen wird.

Praktisch heißt das: Ein 200 mit einem im Body beschriebenen Fehler versteckt das Scheitern dort, wo es sonst niemand sieht. Die Verfügbarkeitsprüfung meldet Grün, das CDN cacht die Fehlerseite, und eine Suchmaschine indexiert sie als echtes Dokument. Das ist das Soft-404-Problem in allgemeiner Form, und es lohnt eine Prüfung, denn die Korrektur ist eine Zeile beim Statuscode, nichts Architektonisches.

Umleitungen: welche dein POST erhalten

Das Vierer-Raster der Umleitungen kreuzt in Wahrheit zwei Fragen: dauerhaft oder temporär, und überlebt die Methode. 301 und 308 sind dauerhaft, 302 und 307 temporär; 307 und 308 sind die beiden, die dem Client jede Änderung der Anfrage verbieten. MDN sagt deutlich, warum es das neuere Paar gibt: 301 verlangte bereits, dass Methode und Body unverändert bleiben, doch ältere Clients setzten das falsch um und wechselten zu GET. Den Bestand konnte niemand reparieren, also wurden zwei neue Codes geprägt, deren Zusicherung in der Definition steht.

Die Wahl folgt also aus dem Verkehr. Für eine Seite, die nur GET erhält, ist 301 in Ordnung und Suchmaschinen sind daran am meisten gewöhnt. Für einen API-Pfad, ein Formularziel oder alles, was POST, PUT oder DELETE empfangen kann, nimm 308, dann kommt die Anfrage unversehrt an. Eine Warnung zur Dauerhaftigkeit: Browser cachen einen 301 aggressiv, manche deutlich länger als erwartet, sodass ein während eines Versuchs ausgelieferter 301 den Versuch auf Rechnern überlebt, auf die du keinen Zugriff hast. Liefere 302 oder 307 aus, solange noch entschieden wird.

Die am häufigsten falsch gelieferten Fehler

401 und 403 sind das Paar, das die meiste Supportzeit kostet. 401 heißt, der Anfrage fehlten gültige Anmeldedaten, und MDN merkt an, dass er mit einem WWW-Authenticate-Header gesendet wird, der das erwartete Verfahren beschreibt — eine Einladung, es mit Anmeldedaten erneut zu versuchen. 403 ist der umgekehrte Fall: Die Anmeldedaten sind vollkommen gültig, und der Client hat für diese Aktion dennoch keine Berechtigung. Ein 401 an einen angemeldeten Nutzer weist dessen Client an, sich neu anzumelden, was genau dieselbe Ablehnung erzeugt, und lässt den Nutzer glauben, seine Anmeldung sei kaputt, obwohl sie es nicht ist.

404 und 410 unterscheiden sich nur im Grad der Gewissheit, und genau darum geht es. MDN ist deutlich: Weiß der Serverbetreiber nicht, ob der Zustand vorübergehend oder dauerhaft ist, gehört dorthin ein 404. 410 nimmt man, wenn man die Sache absichtlich entfernt hat und sie nicht wiederkommt — er ist standardmäßig cachebar und sagt Crawlern, sie sollen aufhören zu fragen. Retry-After wiederum ist ein Header, der entweder eine Verzögerung in Sekunden oder ein HTTP-Datum trägt; bei einem 503 schätzt er, wie lange der Dienst nicht verfügbar ist, bei einem 429 nennt er die Wartezeit bis zur nächsten Anfrage. Er ist ein Hinweis, kein Vertrag, und MDN merkt an, dass die Unterstützung in Clients uneinheitlich ist — doch Googlebot beachtet ihn, was allein schon dafür spricht, ihn bei geplanter Wartung zu setzen.

Die Codes, die man richtig treffen sollte, und worauf jeder festlegt
CodeNameWorauf es festlegtWo es schiefgeht
200OKDie Anfrage war erfolgreich, der Body ist das ErgebnisWird mit einer Fehlermeldung im Body geliefert und verbirgt den Fehler vor Caches, Monitoring und Crawlern
301Dauerhaft verschobenDiese URL ist dauerhaft ersetzt; Links aktualisierenEingesetzt, solange noch entschieden wird — Browser cachen ihn hartnäckig, und alte Clients machen aus einem umgeleiteten POST ein GET
302GefundenVorerst hierhin; die ursprüngliche URL weiter verwendenFür einen dauerhaften Umzug verwendet, sodass die alte URL die Ranking-Signale weiter aufsaugt
304Nicht geändertDeine Cache-Kopie ist noch gültig; es gibt keinen BodyAußerhalb einer bedingten Anfrage gesendet oder mit einem Body, den Clients verwerfen dürfen
307Temporäre UmleitungWie 302, aber Methode und Body dürfen nicht geändert werdenWird selten gewählt, sodass temporäre Umleitungen POST-Abläufe stillschweigend zerstören
308Permanente UmleitungWie 301, aber Methode und Body dürfen nicht geändert werdenBei API-Endpunkten übersehen, wo ein 301 ein POST klammheimlich zu einem GET herabstuft
401Nicht authentifiziertEs wurden keine gültigen Anmeldedaten vorgelegt; ein WWW-Authenticate-Header nennt das ErwarteteAn einen bereits angemeldeten Nutzer ohne Berechtigung gesendet — dieser Fall ist 403
403VerbotenDie Identität wird akzeptiert und die Aktion dennoch verweigertAls Sammelposten benutzt, was Clients zu einer Anmeldung verleitet, die nie hilft
404Nicht gefundenUnter dieser URL ist nichts, und der Server sagt nicht, ob das dauerhaft istErsetzt durch eine nette Seite mit Status 200 — der Soft-404, der tote URLs im Index hält
410VerschwundenAbsichtlich entfernt und kommt nicht wieder; standardmäßig cachebarFast nie verwendet, selbst wenn die Entfernung gewollt war und 404 zu wenig sagt
429Zu viele AnfragenEin Ratenlimit wurde erreicht; Retry-After nennt die Wartezeit vor einer neuen AnfrageOhne Retry-After gesendet, sodass Clients raten und den Endpunkt bombardieren
500Interner ServerfehlerDer Server ist gescheitert und hat nichts Genaueres zu sagenFür eine fehlerhafte Client-Anfrage geliefert, die eigentlich in den 400er-Bereich gehört
502Fehlerhaftes GatewayEin Proxy erhielt eine ungültige Antwort vom weitergeleiteten ServerIn der Anwendung gesucht, während der Fehler zwischen Proxy und Upstream liegt
503Dienst nicht verfügbarVorübergehend nicht lieferfähig; Retry-After schätzt die Dauer des AusfallsBei geplanter Wartung durch einen 500 ersetzt, sodass Crawler den Ausfall für einen echten Fehler halten
HTTP-Statuscode-ReferenzDurchsuche alle Standard-HTTP-Statuscodes nach Klasse, mit Name und einer einzeiligen Beschreibung.Tool ausprobieren

Häufige Fragen

Sollte eine Website-Migration 301 oder 308 verwenden?
Für Seiten, die nur per GET abgerufen werden, ist 301 die sichere Vorgabe und das, was jeder Crawler und Proxy seit Jahrzehnten beherrscht. Greif zu 308 bei allem, was POST, PUT oder DELETE empfangen kann — Formularendpunkte, API-Routen, Webhook-Empfänger — denn dort verwandelt ein Client, der die Methode stillschweigend herabstuft, eine Umleitung in einen verlorenen Anfragekörper. Nichts spricht dagegen, beides in derselben Migration pro Route zu wählen.
Was sollte eine API bei fehlgeschlagener Validierung liefern?
Nimm 400 Bad Request, wenn die Anfrage selbst fehlerhaft ist und der Server sie nicht parsen kann — kaputtes JSON, ein fehlender Pflicht-Header. Nimm 422 Unprocessable Content, wenn die Syntax stimmt, der Inhalt aber deine Regeln bricht, etwa ein wohlgeformter Body mit einem Enddatum vor dem Startdatum. Nicht liefern solltest du einen 500, der einen Client-Fehler dem Server anlastet und dein Fehlerbudget verschmutzt, und auch keinen 200 mit dem Problem im Body, der das Scheitern vor jeder Schicht zwischen dir und dem Aufrufer verbirgt.
Schaden 404er dem Ranking?
Ein 404 ist eine gültige, ehrliche Antwort und ein normaler Bestandteil jeder Website, die schon eine Weile existiert; eine Seite, die es nicht mehr gibt, sollte das sagen. Der Schaden kommt von den Ersatzlösungen. Ein Soft-404 — eine nette Seite mit Status 200 — hält tote URLs im Index und verbraucht Crawl-Budget für nichts. Jede fehlende Seite pauschal auf die Startseite umzuleiten ist derselbe Fehler im 301-Gewand. War die Entfernung absichtlich und dauerhaft, sagt 410 es unmissverständlich.

Artikel, die dich interessieren könnten

Alle Ratgeber
AnleitungWie man einen Cron-Ausdruck schreibt: fünf Felder und die ODER-Regel, die niemand erwähntMinute, Stunde, Tag des Monats, Monat, Wochentag. Die Fallen: Ein Schritt ist eine Schrittweite durch einen Bereich und kein Intervall, und die beiden Tagesfelder werden mit ODER verknüpft — 0 0 1 * 1 läuft also am 1. und an jedem Montag.AnleitungWie man eine robots.txt schreibt: Direktiven, Abgleich und was sie nicht verbergen kannVier Direktiven, zwei Platzhalter, eine Datei im Wurzelverzeichnis des Hosts. Sie ist eine Crawl-Anweisung und nicht mehr — sie entfernt keine Seite aus den Ergebnissen, beschränkt keinen Zugriff und veröffentlicht jeden Pfad, den du darin auflistest.ErklärungWie Unix-Dateirechte funktionieren: 755 lesen, ohne zu ratenLesen ist 4, Schreiben 2, Ausführen 1, und jede der drei Ziffern beschreibt eine andere Partei. Was die meisten Erklärungen falsch darstellen: Bei einem Verzeichnis gewährt das Ausführungsbit den Durchgang, nicht das Recht, etwas zu starten.VergleichcamelCase, snake_case, kebab-case: welche - und warum du selten die Wahl hastDie Konventionen sind keine Geschmacksfrage. Der Bindestrich ist der Minus-Operator, deshalb kann kebab-case in den meisten Sprachen kein Bezeichner sein - und genau darum nutzen CSS und URLs ihn. Dazu der Akronym-Rundtrip, der Namen stillschweigend zerstört, und die Regel, die ihn heilt.ErklärungSemikolon, Tab, Pipe: ein Trennzeichen wählen, das die Reise überstehtWarum die Sprache des Lesers das Trennzeichen bestimmt, was der Konverter beim Wechsel mit der Zitierung macht, was die erste Zeile sep= wirklich ist, und die Zahl zitierter Zellen bei demselben Export in fünf Schreibweisen.AnleitungRegex-Grundlagen: EinsteigerleitfadenEin regulärer Ausdruck ist ein Muster zum Abgleichen von Text. Hier die Bausteine — Zeichenklassen, Quantoren und Anker — mit Beispiel.

Ähnliche Tools

Quellen

Hast du einen Fehler in diesem Artikel entdeckt?