Signification
Une précondition des en-têtes, comme If-Match ou If-Unmodified-Since, s'est révélée fausse, donc le serveur n'a pas appliqué la requête.
Causes courantes
- Quelqu'un d'autre a mis à jour la ressource (l'ETag a changé)
- ETag en cache périmé utilisé dans If-Match
- Envoi conditionnel vers un stockage qui contient déjà un objet plus récent
Comment corriger
Côté client ou visiteur
Refaites un GET de la ressource pour obtenir l'ETag actuel, réappliquez vos modifications et renvoyez.
Côté propriétaire du site ou de l’API
Renvoyez l'ETag actuel et rendez la vérification conditionnelle atomique avec l'écriture.
Exemple de réponse
HTTP/1.1
HTTP/1.1 412 Precondition Failed
Date: Tue, 07 Oct 2025 09:30:00 GMT
Server: nginx
ETag: "v8"
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Precondition Failed",
"status": 412,
"detail": "If-Match \"v7\" does not match the current version \"v8\"."
} Spécification
FAQ
› Qu'est-ce que le contrôle de concurrence optimiste ?
Les clients envoient If-Match avec l'ETag lu ; le serveur rejette l'écriture avec 412 si la ressource a changé entre-temps.
› 412 ou 428 ?
412 : votre précondition a échoué. 428 : vous devez envoyer une précondition.