Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

En-tête If-None-Match

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

L'en-tête de requête HTTP If-None-Match rend la requête conditionnelle. Le serveur renvoie la ressource demandée pour les méthodes GET et HEAD avec un statut 200, uniquement s'il ne possède pas d'ETag correspondant à ceux présents dans l'en-tête If-None-Match. Pour les autres méthodes, la requête ne sera traitée que si l'ETag de la ressource éventuellement existante ne correspond à aucune des valeurs listées.

Quand la condition échoue pour les méthodes GET et HEAD, le serveur doit retourner un code statut 304 Not Modified et toutes les en-têtes suivantes qui auraient été envoyées avec une réponse 200 à la même requête : Cache-Control, Content-Location, Date, ETag, Expires, et Vary. Pour les méthodes qui appliquent des changements côté serveur, le code 412 Precondition Failed est utilisé si la condition échoue.

La comparaison avec l'ETag stocké utilise l'algorithme de comparaison faible, ce qui signifie que deux fichiers sont considérés comme identiques si leur contenu est équivalent — ils n'ont pas besoin d'être identiques octet par octet. Par exemple, deux pages qui diffèrent uniquement par leur date de création dans le pied de page seraient tout de même considérées comme identiques.

Lorsqu'il est utilisé en combinaison avec If-Modified-Since, If-None-Match a la priorité si le serveur le prend en charge.

Il existe deux cas courants d'utilisation de If-None-Match dans les requêtes :

  • Pour les méthodes GET et HEAD, pour mettre à jour une entité en cache qui a un ETag associé.
  • Pour les autres méthodes, et en particulier pour PUT, If-None-Match utilisé avec la valeur * peut servir à enregistrer un fichier uniquement s'il n'existe pas déjà, garantissant que le téléversement n'écrasera pas accidentellement un autre envoi et ne perdra pas les données du précédent PUT ; ce problème est une variante du problème de la mise à jour perdue (angl.).
Type d'en-tête En-tête de requête
En-tête de requête interdit Non

Syntaxe

http
If-None-Match: "<etag_value>"
If-None-Match: "<etag_value>", "<etag_value>", …
If-None-Match: *

Directives

<etag_value>

Des tags d'entité représentant de façon unique les ressources demandées. Ce sont des chaînes de caractères ASCII entre guillemets doubles (comme "675af34563dc-tr34") et peuvent être préfixés par W/ pour indiquer que l'algorithme de comparaison faible doit être utilisé (inutile avec If-None-Match car il n'utilise que cet algorithme).

*

L'astérisque est une valeur spéciale représentant toute ressource. Ils ne sont utilies que quand on téléverse une ressource, habituellement avec PUT, pour vérifier si une autre ressource avec cette identité a déjà été téléversée avant.

Exemples

http
If-None-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"

If-None-Match: W/"67ab43", "54ed21", "7892dd"

If-None-Match: *

Spécifications

Specification
HTTP Semantics
# field.if-none-match

Compatibilité des navigateurs

Voir aussi