La requête entre en conflit avec l’état actuel.
Quand l’utiliser
Valeurs uniques en double, ou modification basée sur une version périmée.
Causes courantes et solutions
409 signifie que la requête est valide mais entre en conflit avec l’état actuel. Cas typiques : insérer un nom d’utilisateur ou un e-mail en double qui viole une contrainte d’unicité, créer quelque chose qui existe déjà, ou sauvegarder une ligne que quelqu’un d’autre a modifiée depuis que vous l’avez lue, ce que détecte une colonne de version. Associez la violation d’unicité de la base de données (Postgres 23505, MySQL 1062) à un 409 au lieu de la laisser remonter en 500.
Le corps doit indiquer ce qui est entré en conflit et, idéalement, inclure la version actuelle, pour que le client puisse fusionner ou demander à l’utilisateur. Réessayer sans rien changer échoue à nouveau, sauf si le conflit était passager, comme un verrou détenu par une autre transaction. Kubernetes renvoie 409 quand une mise à jour porte un resourceVersion périmé ; la solution est la boucle habituelle : relire, réappliquer la modification, renvoyer.
Erreur client (4xx)
Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.
À quoi ça ressemble
HTTP/1.1 409 ConflictComment l’envoyer
| Node.js / Express | res.status(409).end() |
|---|---|
| Python / Flask | return '', 409 |
| nginx | return 409; |
Comment le vérifier
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/