412 Precondition Failed

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 Failed

Cómo enviarlo

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

Cómo comprobarlo

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

Abrir Códigos de estado HTTP