409 Conflict

Die Anfrage steht im Konflikt mit dem aktuellen Zustand.

Wann du ihn verwendest

Doppelte eindeutige Werte oder eine Änderung auf Basis einer veralteten Version.

Häufige Ursachen und Lösungen

409 bedeutet, dass die Anfrage gültig ist, aber mit dem aktuellen Zustand kollidiert. Typische Fälle: ein doppelter Benutzername oder eine doppelte E-Mail-Adresse, die gegen einen Unique-Constraint verstößt, das Anlegen von etwas, das schon existiert, oder das Speichern eines Datensatzes, den jemand anderes seit deinem Lesen geändert hat, erkannt über eine Versionsspalte. Bilde die Unique-Verletzung der Datenbank (Postgres 23505, MySQL 1062) auf 409 ab, statt sie als 500 durchschlagen zu lassen.

Der Body sollte sagen, was kollidiert ist, und idealerweise die aktuelle Version enthalten, damit der Client zusammenführen oder den Benutzer fragen kann. Ein unveränderter erneuter Versuch scheitert wieder, außer der Konflikt war vorübergehend, etwa eine Sperre, die eine andere Transaktion hält. Kubernetes gibt 409 zurück, wenn ein Update eine veraltete resourceVersion mitbringt; die Lösung ist die übliche Schleife: neu lesen, Änderung erneut anwenden, erneut senden.

Client-Fehler (4xx)

4xx-Codes sind Client-Fehler: Die Anfrage selbst ist fehlerhaft, nicht autorisiert oder verweist auf etwas, das es nicht gibt. Dieselbe Anfrage erneut zu senden hilft nicht.

So sieht es aus

HTTP/1.1 409 Conflict

So sendest du ihn

Node.js / Expressres.status(409).end()
Python / Flaskreturn '', 409
nginxreturn 409;

So prüfst du ihn

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

HTTP-Statuscodes öffnen