428 Precondition Required

La solicitud debe ser condicional.

Cuándo usarlo

Al exigir If-Match en las actualizaciones para evitar escrituras perdidas.

Causas habituales y soluciones

428 indica al cliente que aquí el servidor solo acepta solicitudes condicionales: envía If-Match con el ETag que leíste por última vez, para que las ediciones simultáneas no se sobrescriban entre sí sin avisar, el llamado problema de la actualización perdida. Un cliente que recibe 428 debería hacer GET del recurso, tomar su cabecera ETag y reenviar el PUT o el PATCH con If-Match. Si para entonces el ETag está obsoleto, la respuesta es 412.

Como diseñador de API, exígelo solo donde importen las actualizaciones perdidas, y documéntalo, porque la mayoría de los clientes HTTP nunca envían cabeceras condicionales por sí solos. Devuelve el ETag actual en cada GET y en cada escritura correcta. Los proxies no generan 428; siempre viene de la aplicación. Asegúrate de que las CDN y la compresión no reescriben los ETag, o If-Match nunca coincidirá.

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

Cómo enviarlo

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

Cómo comprobarlo

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

Abrir Códigos de estado HTTP