Quando usare e non usare ETag


9

Stavo solo guardando il nostro sito su WebPageTest.org e uno dei loro consigli per accelerare un sito Web è:

Le intestazioni ETag generalmente non dovrebbero essere utilizzate a meno che tu non abbia un motivo esplicito per averne bisogno

Mi chiedevo cosa significa. Significa che i contenuti statici che sai che non cambieranno non dovrebbero averli o che i contenuti che sai che cambieranno regolarmente non dovrebbero averli, o significa che non dovresti usarli in generale a meno che tu non abbia un necessità specifica.

Se è quest'ultimo, quando è il momento giusto per usarli? Grazie per qualsiasi aiuto.

Risposte:


8

Gli ETag sono un'alternativa a (ma possono essere utilizzati in combinazione con) "Last-Modified-Time" per determinare la convalida della cache.

Il client può inviare una condizione preliminare come if-match o if-none-match in base all'ETag. Questo non è solo per le richieste GET (che è ciò che fa webpagetest.org) puoi usare "aggiornamento opportunistico" in modo che una richiesta PUT abbia una pre-condizione e non eseguirà l'operazione di aggiornamento se la risorsa è stata aggiornata da quando ETag era acquisito per ultimo.

In parole povere: premi modifica su una pagina nel tuo CMS, il tuo amico preme modifica in una pagina nel tuo CMS, il tuo amico esegue la modifica e salva i risultati e infine premi Salva - senza un'intestazione ETag o Content-MD5 HTTP di cui avresti bisogno per reinventare la ruota per evitare che si verifichino problemi (come la pulizia delle modifiche dei tuoi amici) la soluzione fa già parte del protocollo HTTP e quindi ha senso utilizzarla.

In generale, sono d'accordo con AOL (che esegue webpagetest.org) sul loro consiglio "taglia unica": è meglio non intasare le intestazioni HTTP con stringhe criptiche (gli ETag generalmente non sono belli o leggibili dall'uomo) quando un secondo di differenza ( che Last-Modified-Time è in grado di rilevare) farà per il lavoro in corso.

Se una pagina viene aggiornata più volte al secondo e hai assolutamente bisogno dell'ultima versione più accurata per essere visualizzata, potresti voler sperimentare soluzioni diverse da HTTP GET o semplicemente usare ETag.

Fai attenzione che i tuoi ETag non includano informazioni per file system, modifica della configurazione del server, ecc. (Come gli inode che sono di default su Apache), altrimenti avrai problemi quando ci sono due server (gli ETag di ognuno non corrisponderanno).


Va bene. C'è un esempio di cui non sono sicuro: se hai più versioni di contenuto tutte su un URI (come una versione mobile o Internet Explorer) ETags può essere usato per cercare OGNI versione per una corrispondenza (quindi si chiama if- nessuna corrispondenza non se non corrispondenza) - a seconda di chi chiedi che ci siano risposte diverse (come non avere un URI permanente per più rappresentazioni, ecc.).
Metalshark,

7

Per parafrasare l'eccellente valutazione di Coding Horror del plugin YSlow Firebug (che sembra che WebPageTest.org stia utilizzando come base per la loro valutazione):

"Yahoo è uno dei siti Web più frequentati al mondo - i suoi problemi probabilmente non sono i tuoi problemi."

Se non hai a che fare con milioni di utenti unici sulla tua rete bilanciata dal carico ogni giorno, c'è una buona probabilità che i suggerimenti forniti non siano tutte le giuste scelte quando ottimizzi il tuo sito.


Apprezzo il commento, ma ti sbagli. Steve Sounders spiega qui: stevesouders.com/blog/2010/09/07/webpagetest-org-and-page-speed (È un grande sostenitore di utili miglioramenti - vale a dire non solo miglioramenti che funzioneranno per Google.) Il nostro sito è sicuramente abbastanza grande da sentire un aumento di velocità da tali miglioramenti (e già lo ha fatto).
Django Reinhardt,

2
L'estensione yslow firebug ora include un test per siti più piccoli che è molto più realistico per la maggior parte dei siti.
John Conde

1
@Django Reinhardt - Ho riformulato la mia risposta, è vero che molti dei suggerimenti sono validi per qualsiasi sito, ma ETags in particolare è controverso perché, nel caso di Y !, la funzionalità è in conflitto con il bilanciamento del carico
danlefree

Il link che hai fornito aveva un link alla descrizione di ETags di Yahoo ( developer.yahoo.com/performance/rules.html#etags ) che risponde bene alle mie domande. (Sì, probabilmente sarebbe meglio per noi non servire gli ETag.) Grazie.
Django Reinhardt,

1
@ Django: se hai più server, allora ETags può essere un problema. Tuttavia, fintanto che lo stesso file restituisce sempre lo stesso ETag, va benissimo. Vedi anche: webmasters.stackexchange.com/questions/1459/…
DisgruntledGoat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.