412 Precondition Failed

Un en-tête conditionnel ne correspondait pas.

Quand l’utiliser

If-Match avec un ETag obsolète, pour éviter les mises à jour perdues.

Causes courantes et solutions

412 signifie qu’une condition jointe par le client n’était pas remplie. Il s’agit généralement d’un If-Match portant un ETag qui ne correspond plus, parce que quelqu’un d’autre a modifié la ressource entre-temps, et le serveur refuse d’écraser sa modification. Le client doit récupérer la version actuelle avec un GET, fusionner ou demander à l’utilisateur, puis réessayer avec le nouvel ETag. If-Unmodified-Since fait la même chose avec des dates.

If-Match exige une comparaison forte : les ETag faibles avec le préfixe W/ ne correspondent donc jamais, et les proxys qui compressent les réponses peuvent affaiblir les ETag, si bien que chaque écriture échoue avec un 412. À l’inverse, If-None-Match: * sur un PUT fait échouer la création avec un 412 quand la ressource existe déjà, une protection peu coûteuse contre l’écrasement. S3 et Google Cloud Storage utilisent aussi 412 pour leurs écritures conditionnelles.

Erreur client (4xx)

Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.

À quoi ça ressemble

HTTP/1.1 412 Precondition Failed

Comment l’envoyer

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

Comment le vérifier

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

Ouvrir l’outil Codes de statut HTTP