If-None-Match
Utilisation
L’en-tête If-None-Match permet la revalidation du cache à partir des étiquettes d’entité. Le client y inclut une ou plusieurs valeurs d’ETag reçues lors d’une réponse précédente. Si l’un des ETag énumérés correspond à la ressource actuelle, le serveur renvoie une réponse 304 Not Modified sans corps, et le client réutilise sa copie en cache. Si aucun ETag ne correspond, le serveur envoie une réponse 200 normale avec le contenu mis à jour.
Pour les méthodes sûres comme GET et HEAD, il s’agit du principal mécanisme de revalidation du cache. Pour les méthodes non sûres comme PUT, If-None-Match avec le caractère générique * empêche d’écraser une ressource existante, évitant ainsi le problème de la mise à jour perdue. Le serveur renvoie 412 Precondition Failed lorsqu’une correspondance est trouvée sur une requête non sûre.
Lorsque If-None-Match et If-Modified-Since figurent tous deux dans la même requête, If-None-Match est prioritaire. La comparaison fondée sur l’ETag est plus fiable que celle fondée sur la date, car les étiquettes d’entité sont des identifiants opaques liés au contenu exact, tandis que les horodatages ont une résolution d’une seconde et sont sujets à la dérive d’horloge.
Lorsque le serveur renvoie 304, la réponse inclut des en-têtes issus de la réponse réussie d’origine : Cache-Control, Content-Location, Date, ETag, Expires et Vary.
Remarque
Googlebot envoie If-None-Match lors de ses requêtes d’exploration lorsque la réponse précédente contenait un ETag. Les serveurs qui renvoient 304 pour du contenu inchangé économisent du temps de traitement et des ressources, ce qui améliore indirectement l’efficacité de l’exploration. Les serveurs sont également libres de renvoyer 304 de manière proactive pour n’importe quelle requête de Googlebot lorsque le contenu n’a pas changé, que la requête comporte ou non des en-têtes conditionnels. Définir le champ max-age de l’en-tête de réponse Cache-Control sur le nombre de secondes pendant lesquelles le contenu est censé rester inchangé aide les robots d’exploration à déterminer quand réexplorer une URL.
Valeur d’ETag
Une ou plusieurs valeurs d’ETag, chacune entourée de guillemets doubles. Les valeurs multiples sont séparées par des virgules. Les ETags forts comme les ETags faibles (préfixés par W/) sont valides.
* (caractère générique)
Le caractère générique * correspond à toute entité actuelle. Utilisé avec PUT, il empêche la création d’une ressource lorsqu’il en existe déjà une.
Exemple
Un client revalide une ressource en cache à l’aide d’un seul ETag. Le serveur renvoie 304 si la ressource correspond toujours à l’étiquette d’entité fournie.
If-None-Match: "abc123"
Un client détenant plusieurs versions en cache envoie tous les ETags connus. Le serveur confronte chacun d’eux à la ressource actuelle. Si l’un correspond, le serveur renvoie 304.
If-None-Match: "abc123", "def456"
Une comparaison d’ETag faible. Les validateurs faibles indiquent une équivalence sémantique plutôt qu’une identité octet par octet. Le préfixe W/ signale une comparaison faible.
If-None-Match: W/"v2.6"
Une requête PUT utilisant le caractère générique pour empêcher un écrasement. Le serveur renvoie 412 Precondition Failed si une ressource existe déjà à l’URL cible.
PUT /api/resource HTTP/1.1
If-None-Match: *
Remarque
Pour une assistance en matière de SEO et de mise en cache, contactez les anciens consultants SEO de Google, Search Brothers.