428 Precondition Required

A requisição precisa ser condicional.

Quando usar

Exigir If-Match em atualizações para evitar perda de gravações.

Causas comuns e soluções

O 428 avisa ao cliente que o servidor só aceita requisições condicionais aqui: envie If-Match com o ETag que você leu por último, para que edições simultâneas não se sobrescrevam silenciosamente, o problema da atualização perdida. Um cliente que recebe 428 deve fazer GET do recurso, pegar o cabeçalho ETag e reenviar o PUT ou PATCH com If-Match. Se nesse meio-tempo o ETag ficar desatualizado, a resposta é 412.

Como designer de API, exija-o só onde atualizações perdidas importam, e documente isso, porque a maioria dos clientes HTTP nunca envia cabeçalhos condicionais por conta própria. Retorne o ETag atual em todo GET e em toda escrita bem-sucedida. Proxies não geram 428; ele sempre vem da aplicação. Garanta que CDNs e compressão não reescrevam os ETags, senão o If-Match nunca vai corresponder.

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 428 Precondition Required

Como enviar

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

Como verificar

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

Abrir Códigos de status HTTP