Vai al contenuto

ETag

Un ETag identifica una specifica versione della rappresentazione di una risorsa HTTP e consente letture o modifiche condizionali.

Noto anche comeEntity tag
API e contratti dati

Un entity tag è un validatore HTTP nell’header di risposta ETag. Identifica una versione specifica della rappresentazione inviata. Il valore non deve necessariamente essere un hash del contenuto e il client deve trattarlo come un identificativo opaco, non come un numero di versione ordinabile.

Due richieste condizionali

Una vista di progetto fittizia risponde con ETag: "r7". A un successivo GET con If-None-Match: "r7", il server può restituire 304 senza inviare nuovamente il corpo se la rappresentazione non è cambiata. Se è cambiata, viene trasferita la nuova rappresentazione con il nuovo validatore.

In una modifica, lo stesso identificativo ha un altro ruolo: un aggiornamento con If-Match: "r7" incontra la rappresentazione ora corrente "r8". La precondizione non soddisfatta produce 412 invece di sovrascrivere lo stato più recente con la vecchia modifica. L’applicazione deve gestire il conflitto in modo visibile. Controllo e modifica devono funzionare correttamente insieme sul server; inviare un header non protegge da solo.

If-Match usa un confronto forte. Un validatore debole con il prefisso W/ non soddisfa questo confronto. Lettura della cache e controllo della scrittura usano quindi condizioni diverse. Un ETag non sostituisce neppure il controllo delle autorizzazioni e non decide chi può vedere o modificare i dati.

Fonti