412 Precondition Failed

Um cabeçalho condicional não correspondeu.

Quando usar

If-Match com um ETag desatualizado, para evitar perda de atualizações.

Causas comuns e soluções

O 412 significa que uma condição anexada pelo cliente não se confirmou. Normalmente é um If-Match com um ETag que não corresponde mais, porque outra pessoa atualizou o recurso primeiro, e o servidor se recusa a sobrescrever a alteração dela. O cliente deve fazer GET da versão atual, mesclar ou perguntar ao usuário e então tentar de novo com o novo ETag. If-Unmodified-Since faz o mesmo com datas.

O If-Match exige comparação forte, então ETags fracos com o prefixo W/ nunca correspondem, e proxies que comprimem respostas podem enfraquecer ETags, fazendo toda escrita falhar com 412. O inverso, If-None-Match: * em um PUT, faz a criação falhar com 412 quando o recurso já existe, uma proteção barata contra sobrescrita. O S3 e o Google Cloud Storage também usam 412 nas suas escritas condicionais.

Erro do cliente (4xx)

Os códigos 4xx são erros do cliente: a própria requisição está errada, não está autorizada ou aponta para algo que não existe. Repetir a mesma requisição não vai adiantar.

Como fica

HTTP/1.1 412 Precondition Failed

Como enviar

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

Como verificar

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

Abrir Códigos de status HTTP