Una cabecera condicional no coincidió.
Cuándo usarlo
If-Match con un ETag desactualizado, para evitar perder actualizaciones.
Causas habituales y soluciones
412 significa que no se cumplió una condición que adjuntó el cliente. Normalmente es un If-Match con un ETag que ya no coincide, porque otra persona actualizó antes el recurso, y el servidor se niega a sobrescribir su cambio. El cliente debería hacer GET de la versión actual, fusionar los cambios o preguntar al usuario, y luego reintentar con el nuevo ETag. If-Unmodified-Since hace lo mismo con fechas.
If-Match necesita una comparación fuerte, así que los ETag débiles con el prefijo W/ nunca coinciden, y los proxies que comprimen las respuestas pueden debilitar los ETag, lo que hace que todas las escrituras fallen con 412. A la inversa, If-None-Match: * en un PUT hace que la creación falle con 412 si el recurso ya existe, una protección barata contra sobrescrituras. S3 y Google Cloud Storage también usan 412 para sus escrituras condicionales.
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 412 Precondition FailedCómo enviarlo
| Node.js / Express | res.status(412).end() |
|---|---|
| Python / Flask | return '', 412 |
| nginx | return 412; |
Cómo comprobarlo
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/