Żą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 ConflictJak go wysłać
| Node.js / Express | res.status(409).end() |
|---|---|
| Python / Flask | return '', 409 |
| nginx | return 409; |
Jak go sprawdzić
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/