Aller au contenu

ETag

Un ETag identifie une version de représentation d’une ressource HTTP et permet des lectures ou modifications conditionnelles.

Également appeléEntity tag
API et contrats de données

Un entity tag est un validateur HTTP transmis dans l’en-tête de réponse ETag. Il identifie une version précise de la représentation envoyée. Sa valeur n’est pas nécessairement un hash du contenu et doit être traitée par le client comme un identifiant opaque, pas comme un numéro de version à trier.

Deux requêtes conditionnelles

Une vue de projet fictive répond avec ETag: "r7". Lors d’un GET ultérieur avec If-None-Match: "r7", le serveur peut renvoyer 304 sans retransmettre le corps si la représentation est inchangée. Si elle a changé, la nouvelle représentation est transférée avec son nouveau validateur.

Pour une modification, le même identifiant joue un autre rôle : une édition utilisant If-Match: "r7" rencontre la représentation désormais courante "r8". La précondition non remplie produit 412 au lieu d’écraser le nouvel état avec l’ancienne édition. L’application doit traiter ce conflit de manière visible. Vérification et modification doivent fonctionner correctement ensemble sur le serveur ; envoyer un en-tête ne protège pas à lui seul.

If-Match utilise une comparaison forte. Un validateur faible avec le préfixe W/ ne satisfait pas cette comparaison. La lecture du cache et le contrôle d’écriture utilisent donc des conditions différentes. Un ETag ne remplace pas non plus le contrôle d’autorisation et ne décide pas qui peut voir ou modifier les données.

Sources

Articles sur le sujet

Votre projet avec ASES

Décrivez-nous votre projet. Nous revenons vers vous avec une première évaluation.