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 FailedComo enviar
| Node.js / Express | res.status(412).end() |
|---|---|
| Python / Flask | return '', 412 |
| nginx | return 412; |
Como verificar
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/