Naar de inhoud

ETag

Een ETag identificeert een bepaalde representatieversie van een HTTP-resource en ondersteunt voorwaardelijk lezen of wijzigen.

Ook bekend alsEntity tag
API's en datacontracten

Een entity tag is een HTTP-validator in de antwoordheader ETag. Hij identificeert een bepaalde versie van de geleverde representatie. De waarde hoeft geen inhoudshash te zijn en moet door de client als een ondoorzichtige identificatie worden behandeld, niet als een sorteerbaar versienummer.

Twee voorwaardelijke aanvragen

Een fictief projectoverzicht antwoordt met ETag: "r7". Bij een latere GET met If-None-Match: "r7" kan de server 304 teruggeven zonder de body opnieuw te sturen als de representatie ongewijzigd is. Is ze veranderd, dan wordt de nieuwe representatie met haar nieuwe validator overgedragen.

Bij een wijziging heeft dezelfde identificatie een andere rol: een bewerking met If-Match: "r7" treft de inmiddels actuele representatie "r8" aan. De niet-vervulde voorwaarde leidt tot 412 in plaats van de nieuwere toestand met de oude bewerking te overschrijven. De toepassing moet dit conflict zichtbaar afhandelen. Controle en wijziging moeten op de server correct samenwerken; alleen een header meesturen beschermt niet.

If-Match gebruikt een sterke vergelijking. Een zwakke validator met het voorvoegsel W/ voldoet niet aan die vergelijking. Een cacheopvraag en schrijfcontrole gebruiken dus verschillende voorwaarden. Een ETag vervangt ook geen bevoegdheidscontrole en bepaalt niet wie de gegevens mag zien of wijzigen.

Bronnen