409 Conflict

Żądanie jest sprzeczne z bieżącym stanem.

Kiedy go używać

Zduplikowane wartości unikalne albo edycja oparta na nieaktualnej wersji.

Typowe przyczyny i rozwiązania

409 oznacza, że żądanie jest poprawne, ale koliduje z bieżącym stanem. Typowe przypadki: wstawienie zduplikowanej nazwy użytkownika lub e-maila, które narusza ograniczenie unikalności, utworzenie czegoś, co już istnieje, albo zapis rekordu, który ktoś inny zmienił od czasu Twojego odczytu, wykryty dzięki kolumnie wersji. Mapuj błąd naruszenia unikalności z bazy (Postgres 23505, MySQL 1062) na 409, zamiast pozwalać mu wypłynąć jako 500.

Treść odpowiedzi powinna mówić, co spowodowało konflikt, i najlepiej zawierać bieżącą wersję, żeby klient mógł scalić zmiany lub zapytać użytkownika. Ponowienie bez zmian znów się nie uda, chyba że konflikt był przejściowy, np. blokada trzymana przez inną transakcję. Kubernetes zwraca 409, gdy aktualizacja niesie nieaktualne resourceVersion; rozwiązaniem jest zwykła pętla: odczytaj ponownie, nanieś zmianę jeszcze raz, wyślij ponownie.

Błąd klienta (4xx)

Kody 4xx to błędy klienta: samo żądanie jest błędne, nieautoryzowane albo wskazuje na coś, czego nie ma. Ponowienie tego samego żądania nic nie da.

Jak to wygląda

HTTP/1.1 409 Conflict

Jak go wysłać

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

Jak go sprawdzić

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

Otwórz narzędzie Kody statusu HTTP