La solicitud entra en conflicto con el estado actual.
Cuándo usarlo
Valores únicos duplicados o una edición basada en una versión obsoleta.
Causas habituales y soluciones
409 significa que la solicitud es válida, pero choca con el estado actual. Casos típicos: insertar un nombre de usuario o un correo duplicados que violan una restricción de unicidad, crear algo que ya existe, o guardar un registro que otra persona ha modificado desde que lo leíste, algo que se detecta con una columna de versión. Asigna la violación de unicidad de la base de datos (Postgres 23505, MySQL 1062) a 409 en lugar de dejar que aparezca como un 500.
El cuerpo debería indicar qué entró en conflicto e idealmente incluir la versión actual, para que el cliente pueda fusionar los cambios o preguntar al usuario. Reintentar sin cambios vuelve a fallar, a menos que el conflicto fuera transitorio, como un bloqueo que mantiene otra transacción. Kubernetes devuelve 409 cuando una actualización lleva un resourceVersion obsoleto; la solución es el bucle de siempre: volver a leer, volver a aplicar el cambio y reenviar.
Error del cliente (4xx)
Los códigos 4xx son errores del cliente: la solicitud en sí es incorrecta, no está autorizada o apunta a algo que no existe. Repetir la misma solicitud no servirá de nada.
Cómo se ve
HTTP/1.1 409 ConflictCómo enviarlo
| Node.js / Express | res.status(409).end() |
|---|---|
| Python / Flask | return '', 409 |
| nginx | return 409; |
Cómo comprobarlo
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/