En-tête If-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-Match rend une requête conditionnelle.
Un serveur retournera les ressources pour les méthodes GET et HEAD, ou acceptera l'envoi d'une ressource pour PUT et d'autres méthodes non sûres, uniquement si la ressource correspond à l'une des valeurs ETag dans l'en-tête de requête If-Match.
Si la condition n'est pas remplie, la réponse 412 Precondition Failed est renvoyée.
La comparaison avec l'ETag stockée utilise l'algorithme de comparaison forte, ce qui signifie que deux fichiers sont considérés comme identiques octet par octet.
Si une ETag listée possède le préfixe W/ indiquant une entité faible (Weak en anglais), cet algorithme de comparaison ne la fera jamais correspondre.
Il existe deux cas d'utilisation courants :
- Pour les méthodes
GETetHEAD, utilisé avec l'en-têteRange, cela garantit que les nouvelles plages demandées proviennent de la même ressource que la précédente. - Pour les autres méthodes, et en particulier pour
PUT,If-Matchpeut être utilisé pour éviter le problème de mise à jour perdue (angl.). Il permet de vérifier que la modification d'une ressource que l'utilisateur·ice souhaite envoyer n'écrasera pas une autre modification effectuée depuis la récupération de la ressource d'origine.
| Type d'en-tête | En-tête de requête |
|---|---|
| En-tête de requête interdit | Non |
Syntaxe
If-Match: <etag_value>
If-Match: <etag_value>, <etag_value>, …
Directives
<etag_value>-
Balises d'entité représentant de façon unique les ressources demandées. Ce sont des chaînes de caractères ASCII placées entre guillemets doubles (comme
"675af34563dc-tr34"). Elles peuvent être préfixées parW/pour indiquer qu'elles sont « faibles », c'est-à-dire qu'elles représentent la ressource sémantiquement mais pas octet par octet. Cependant, dans un en-têteIf-Match, les balises d'entité faibles ne correspondront jamais. *-
L'astérisque est une valeur spéciale représentant n'importe quelle ressource. Notez que cela doit correspondre à
falsesi le serveur d'origine n'a pas de représentation actuelle pour la ressource cible.
Exemples
If-Match: "bfc13a64729c4290ef5b2c2730249c88ca92d82d"
If-Match: "67ab43", "54ed21", "7892dd"
If-Match: *
Spécifications
| Specification |
|---|
| HTTP Semantics> # field.if-match> |
Compatibilité des navigateurs
Voir aussi
- L'en-tête
ETag - Les en-têtes de requête conditionnelle
If-None-Match,If-Modified-Since,If-Unmodified-Since - Le code de statut
412 Precondition Failed