If-None-Match
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
L'en-tête de requête HTTP If-None-Match
permet de conditionner la requête. Pour les méthodes GET
et HEAD
, le serveur renvoie la ressource demandée, avec un statut 200
, seulement si elle n'a pas un ETag
correspondant à ceux fournis. Pour les autres méthodes, la requête ne sera traitée que si l'ETag
de l'éventuelle ressource 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 HTTP 304 (Not Modified). Pour les méthodes appliquant des changements côté serveur, le code statut 412 (Precondition Failed) est utilisé. Notez que le serveur générant une réponse 304 DOIT générer toutes les en-têtes qui auraient été envoyées avec une réponse 200 (OK) à la même requête : Cache-Control, Content-Location, Date, ETag, Expires, and Vary.
La comparaison avec l'ETag
stocké utilise l'algorithme de comparaison faible, c'est-à-dire que 2 fichiers sont considérés identiques pas seulement s'ils sont identiques octet à octet mais si leurs contenus sont équivalents. Par exemple, 2 pages dont seule la date de génération dans le pied de page diffère seraient considérées identiques.
Quand utilisé avec If-Modified-Since
, il a la priorité (si le serveur le supporte).
Il y a 2 cas d'utilisation communs:
- Pour les méthodes
GET
andHEAD
, pour mettre à jour une entité en cache qui a unETag
associé. - Pour les autres méthodes, et en particulier pour
PUT
,If-None-Match
avec pour valeur*
peut être utilisé pour sauver un fichier dont on ne sait pas s'il existe, garantissant qu'un autre téléversement n'a pas été fait avant, perdant les données du précédent chargement ; ce problème est une variation du problème de la mise à jour perdue.
Type d'en-tête | En-tête de requête |
---|---|
Nom d'en-tête interdit | non |
Syntaxe
If-None-Match: "<valeur_etag>" If-None-Match: "<valeur_etag>", "<valeur_etag>", … 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-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
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
BCD tables only load in the browser
Voir aussi
ETag
If-Unmodified-Since
If-Modified-Since
If-Match
304
Not Modified
412
Precondition Failed