La risposta è che dipende.
Esistono due tipi di tag Etags, deboli e forti. I più deboli ti permettono di eseguire determinate operazioni condizionali, ma la maggior parte di esse richiederà forti attacchi di stato.
L'unica restrizione su un etag forte è che se la rappresentazione cambia per qualsiasi motivo, così fa l'etag. Se si tratta di un file, puoi generare un hash, ma ciò ti obbliga a mantenere l'entità in memoria mentre la generi. In alternativa, è possibile semplicemente eseguire lo streaming del contenuto e aggiungere Etag come intestazione HTTP finale, ma quasi nessun server attualmente supporta tale funzionalità (molto utile e non).
Le zecche hanno una risoluzione bassa ed è possibile che due scritture contigue sullo stesso file abbiano lo stesso numero di zecche, anche se il contenuto è diverso. A quel punto, l'etag non è più valido se è forte e sei in acqua fangosa. Lo stesso problema con Last-Modified davvero. Il modo in cui la maggior parte dei server HTTP si occupa di fornire un file è un etag basato su più proprietà, pseudonimo, dimensioni e probabilmente ID oggetto file (inode in apache, probabilmente aggiungendo il percorso completo alla voce dell'archivio oggetti su NT, e IIS aggiunge un contatore anche a questo valore, quindi due modifiche di configurazione su un server genererebbero etags diversi, nel caso in cui qualcosa cambi).
Se si utilizza una sorta di database, la versione id + dovrebbe essere un forte etag (a patto che, di nuovo, il contenuto non sia un insieme di più cose che ciascuna potrebbe cambiare indipendentemente senza che anche le versioni di modifica delle radici).
Quindi, come calcolarlo dipende molto dal tuo scenario, e il persistere di un hash del file in scrittura (prima di iniziare la pubblicazione) probabilmente ti aiuterà di più, specialmente perché è una funzionalità molto utile per molti altri motivi.
semanticamente l'ETag dovrebbe cambiare quando il contenuto cambia ... quindi l'hash sembra appropriato ... ma l'ETag deve anche essere univoco su diversi URL e/o timestamp diversi di file duplicati ... quindi per essere sicuri hash il file, concatenarlo con il timestamp e l'url e l'hash che ancora ... – Yahia
@ Yahia dovresti rendere questo commento una risposta – Simon
fatto proprio ora :-) – Yahia