HTTP-Statuscodes
Alle registrierten HTTP-Statuscodes: was sie bedeuten, wann sie auftreten und wo sie definiert sind.
Select a code
Was sind HTTP-Statuscodes?
Jede HTTP-Response beginnt mit einem dreistelligen Statuscode, der sagt, was mit dem Request passiert ist. Die erste Ziffer gibt die Klasse an: 1xx ist informativ, 2xx bedeutet Erfolg, 3xx Weiterleitung, 4xx heißt, der Request war fehlerhaft, und 5xx, dass der Server versagt hat.
Die Codes sind in RFC 9110 definiert, HTTP Semantics, der 2022 RFC 7231 abgelöst hat, und in einigen weiteren RFCs wie RFC 6585 für 429 Too Many Requests. Die IANA führt das offizielle Register. RFC 9110 hat zwei Codes umbenannt: 413 heißt jetzt Content Too Large (früher Payload Too Large) und 422 Unprocessable Content (früher Unprocessable Entity). Nummern und Verhalten haben sich nicht geändert.
Manche Codes, die dir begegnen, stehen nicht im Register. nginx protokolliert 499, wenn ein Client die Verbindung schließt, bevor die Response fertig ist, Cloudflare schickt 520 bis 526, wenn es vom Ursprungsserver keine brauchbare Antwort bekommt, und Laravel schickt 419, wenn das CSRF-Token eines Formulars abgelaufen ist. Sie sind separat aufgeführt und als inoffiziell markiert.
Der Statuscode ist das Erste, was ein API-Test prüfen sollte, weil der Rest der Response von ihm abhängt. Ein 201 Created sagt dir, dass ein POST eine neue Ressource angelegt hat, ein 404, dass es die Ressource nicht gibt, und ein 500, dass der Server versagt hat. Dann kann der Body eine Fehlerseite sein statt des erwarteten JSON.
So benutzt du dieses Tool
- 1Blättere durch die Liste, gruppiert von 1xx bis 5xx mit den inoffiziellen Codes am Ende, oder filtere sie mit den Klassen-Buttons.
- 2Such nach Nummer, Name oder Symptom, etwa
404,5xx,redirect,timeoutoder einem früheren Namen wieUnprocessable Entity. Mit / springst du von überall auf der Seite ins Suchfeld. - 3Wähle einen Code oder bewege dich mit den Pfeiltasten durch die Liste, um zu sehen, was er bedeutet, wann er auftritt, welche Spezifikation ihn definiert und welche verwandten Codes du zum Vergleich ansehen solltest.
- 4Kopiere den
curl-Befehl unter Try it, damit der Status-Endpoint von testingapis.com diesen Code zurückgibt, oder kopiere einen Link:/de/tools/http-status/#429öffnet direkt die 429.
Fehlerbehebung
- Ein 401, obwohl du einen Token geschickt hast
- Der Token ist abgelaufen, fehlerhaft, steckt im falschen Header oder es fehlt das Präfix
Bearer. Der Response-HeaderWWW-Authenticatesagt oft, was davon. Ein 403 bedeutet dagegen, dass der Token gültig ist, aber die Berechtigung fehlt. - Ein 415 bei einem JSON-Body
- Dem Request fehlt der Header
Content-Type: application/json, deshalb behandelt der Server den Body nicht als JSON.-din curl schicktapplication/x-www-form-urlencoded, außer du setzt den Header. - Ein POST wird nach einer Weiterleitung zum GET
- Clients folgen 301 und 302, indem sie den Request als GET ohne Body wiederholen. Server, die die Methode erhalten müssen, sollten 307 oder 308 senden.
- Ein 502 oder 504 vom Load Balancer
- Der Proxy vor der Anwendung hat keine gültige Antwort bekommen: 502, wenn die Anwendung abgestürzt ist oder die Verbindung geschlossen hat, 504, wenn sie länger als das Timeout des Proxys gebraucht hat. Die Logs der Anwendung selbst zeigen die Ursache.
- 499 in den nginx-Logs
- Der Client hat aufgegeben, bevor die Response fertig war: Ein Nutzer hat die Seite verlassen, oder ein Client bzw. vorgeschalteter Proxy ist ins Timeout gelaufen. Meist sind langsame Backend-Requests die Ursache.
Häufige Fragen
Was ist der Unterschied zwischen 401 und 403?
401 Unauthorized bedeutet, dass der Server nicht weiß, wer du bist: Zugangsdaten fehlen, sind abgelaufen oder falsch. 403 Forbidden bedeutet, dass er weiß, wer du bist, diese Identität aber das nicht darf. Neu anmelden kann ein 401 beheben, kein 403.
Soll eine API bei ungültiger Eingabe 400 oder 422 liefern?
Beides ist verbreitet. Eine übliche Konvention: 400 für einen Request, den der Server gar nicht lesen kann, etwa fehlerhaftes JSON, und 422 für korrekt aufgebaute Daten, die gegen eine Regel verstoßen, etwa ein fehlendes Pflichtfeld oder eine ungültige E-Mail.
Was ist der Unterschied zwischen 502, 503 und 504?
Alle drei kommen meist von einem Proxy oder Load Balancer vor der Anwendung. 502 Bad Gateway heißt, er hat vom Server dahinter eine ungültige Antwort bekommen, 503 Service Unavailable, dass der Dienst überlastet ist oder gewartet wird, und 504 Gateway Timeout, dass der Server dahinter nicht rechtzeitig geantwortet hat.
Welchen Redirect-Code sollte ich verwenden?
301 und 308 sind dauerhaft, 302 und 307 vorübergehend. 307 und 308 verlangen, dass der Client den Request mit derselben Methode und demselben Body wiederholt, während Clients nach einem 301 oder 302 aus einem POST meist ein GET machen. Nimm 303 See Other, um einen Client nach einem POST auf eine Ergebnisseite zu schicken.
Ist 418 I'm a teapot ein echter Statuscode?
Er stammt aus RFC 2324, einem Aprilscherz von 1998 über die Steuerung von Kaffeemaschinen. RFC 9110 führt 418 als ungenutzt, aber reserviert, weil so viel Software ihn bereits kennt. Für echte Fehler ist er nicht gedacht.
Wie teste ich, wie meine App mit einem bestimmten Statuscode umgeht?
Ruf einen Endpoint auf, der den gewünschten Code zurückgibt. GET https://api.testingapis.com/api/status/503 antwortet mit einem 503 und den Headern, die dieser Status normalerweise mitbringt, etwa Retry-After. Jeder Code von 200 bis 599 funktioniert.