Sono leggermente diversi: l'ETag non dispone di alcuna informazione che il client può utilizzare per determinare se inoltrare o meno una richiesta per tale file in futuro. Se ETag è tutto ciò che ha, dovrà sempre fare una richiesta. Tuttavia, quando il server legge ETag dalla richiesta del client, il server può quindi decidere se inviare il file (HTTP 200) o dire al client di usare solo la loro copia locale (HTTP 304). Un ETag è fondamentalmente solo un checksum per un file che cambia semanticamente quando cambia il contenuto del file.
L'intestazione Expires viene utilizzata dal client (e dai proxy/cache) per determinare se è necessario o meno effettuare una richiesta al server. Più sei vicino alla data di scadenza, più è probabile che il client (o il proxy) effettui una richiesta HTTP per quel file dal server.
Quindi, davvero quello che vuoi fare è utilizzare ENTRAMBI le intestazioni - imposta l'intestazione Expires su un valore ragionevole in base alla frequenza con cui il contenuto cambia. Quindi configurare gli ETag da inviare in modo che quando i client DEVONO inviare una richiesta al server, è più facile determinare se inviare o meno il file.
Un'ultima nota su ETag: se si sta utilizzando un'installazione server con bilanciamento del carico con più macchine che eseguono Apache, probabilmente si vorrà disattivare la generazione di ETag. Questo perché gli inode sono usati come parte dell'algoritmo di hash ETag che sarà diverso tra i server. È possibile configurare Apache in modo che non utilizzi gli inode come parte del calcolo, ma in questo caso si desidera assicurarsi che i timestamp dei file siano esattamente gli stessi, per garantire che lo stesso ETag venga generato per tutti i server.
fonte
2009-02-01 03:18:16
https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching (buono in generale) –