If-Unmodified-Since
Utilisation
Les clients incluent If-Unmodified-Since pour éviter d’écraser des modifications apportées par d’autres. Le scénario le plus courant concerne une requête HTTP PUT ou DELETE pour laquelle le client doit avoir la certitude que la ressource est restée dans l’état observé précédemment. Si un autre client a modifié la ressource après la date indiquée dans l’en-tête, le serveur rejette la requête avec une réponse 412 Precondition Failed.
Cela répond au problème de la mise à jour perdue. Deux clients récupèrent la même ressource, chacun effectue des modifications, et tous deux envoient une mise à jour. Sans précondition, la seconde mise à jour écrase silencieusement la première. Ajouter If-Unmodified-Since à la seconde requête garantit que le serveur détecte le conflit.
La valeur de l’en-tête utilise le format de date HTTP. Le serveur compare cette date à l’horodatage Last-Modified de la ressource. Lorsque la date de modification de la ressource est égale ou antérieure à la valeur de If-Unmodified-Since, la condition est satisfaite et le serveur poursuit le traitement.
Pour des garanties de cohérence plus fortes, préférez If-Match avec une valeur d’ETag. Les ETag offrent une précision au niveau de l’octet, alors que les conditions fondées sur une date ont une résolution d’une seconde.
HTTP-date
La valeur suit le format IMF-fixdate. La date représente la date de modification la plus tardive acceptable pour la ressource.
If-Unmodified-Since: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
Exemple
Un client a récupéré un document le 15 février 2025 et envoie maintenant une mise à jour. La valeur de If-Unmodified-Since correspond à la date Last-Modified reçue dans la réponse initiale. Si le document a changé après cet horodatage, le serveur répond 412 Precondition Failed.
PUT /docs/report.json HTTP/1.1
Host: api.example.re
Content-Type: application/json
If-Unmodified-Since: Sat, 15 Feb 2025 10:30:00 GMT
Associé à une requête Range pour des téléversements partiels, If-Unmodified-Since garantit que la ressource de base n’a pas changé entre les fragments.
PATCH /files/dataset.csv HTTP/1.1
Host: api.example.re
If-Unmodified-Since: Fri, 14 Feb 2025 08:00:00 GMT
Content-Range: bytes 0-1023/4096