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
GETetHEAD, pour mettre à jour une entité en cache qui a un ETag associé. - Pour les autres méthodes, et en particulier pour
PUT,If-None-Matchutilisé 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édentPUT; 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
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 parW/pour indiquer que l'algorithme de comparaison faible doit être utilisé (inutile avecIf-None-Matchcar 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
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
- L'en-tête
ETag - Les en-têtes de requête conditionnelle
If-Match,If-Modified-Since,If-Unmodified-Since - Les codes de statut de réponse
304 Not Modified,412 Precondition Failed