Domanda

Quale potrebbe essere la differenza tra se-Modified-Since e se-None-Match? Ho la sensazione che se-None-Match viene utilizzato per i file mentre se-Modified-Since viene utilizzato per le pagine?

È stato utile?

Soluzione

Per quanto riguarda le differenze tra Last-Modified/If-Modified-Since e ETag/If-None-Match:

Entrambi possono essere utilizzati in modo intercambiabile. Tuttavia a seconda del tipo di risorsa, e come viene generato sul server, l'una o l'altra domanda ( "ciò è stato modificato dopo ...?" / "Fa questo ancora corrisponde a questo ETag?") Può essere più facile di rispondere .

Esempi:

  • Se stai servendo i file, utilizzando mtime del file come la data Last-Modified è la soluzione più semplice.
  • Se stai servendo una pagina web dinamica costruita da un certo numero di query SQL, controllare se i dati restituiti da una qualsiasi di queste domande è cambiato possono essere poco pratico (a meno che non tutti hanno una sorta di colonna "Ultima modifica") . In questo caso, utilizzando ad esempio un hash MD5 del contenuto della pagina come ETag sarà molto più facile.
    OTOH, questo significa che si devono ancora produrre l'intera pagina sul server, anche per un GET condizionale. Capire che cosa ha esattamente di andare in ETag (chiavi primarie, i numeri di revisione, ecc ...) si può risparmiare un sacco di tempo qui.

Vedi questi link per maggiori dettagli sul tema:

Altri suggerimenti

If-Modified-Since viene confrontato con i Last-Modified mentre If-None-Match viene confrontato con ETag . Sia Modified-Since e ETag possono essere utilizzati per identificare una variante specifica di una risorsa.

Ma il confronto di If-Modified-Since per Last-Modified fornisce le informazioni se la variante di cache è anziani o più nuovo , mentre il confronto delle If-None-Match per ETag solo fornisce le informazioni se sia sono identica o meno. Inoltre fare la maggior parte dei generatori ETag includono le informazioni del sistema specifico inode in modo spostamento di un file ad un un'unità differente può modificare il ETag pure.

valore di timestamp utilizzato in Last-Modified / precisione If-Modified-Since ha limitato - un secondo e che non è sufficiente per la rapida evoluzione contenuti come, per esempio, applicazioni Web-chat in cui più di un messaggio potrebbe essere pubblicato su qualsiasi dato secondo. ETag / If-None-Match può contribuire a risolvere il problema.

Come si afferma nel best practice di Google:

  

E 'importante specificare uno dei scade o Cache-Control max-age, e uno di Last-Modified o ETag, per tutte le risorse memorizzabili nella cache. E 'superfluo specificare sia scade e Cache-Control:. Max-age, o per specificare entrambi Last-Modified e ETag

https://developers.google.com/speed/docs/best-practices/caching

If-Modified-Since utilizza una data , mentre If-None-match utilizza un ETag . Possono entrambi essere utilizzati per "pagine" (vale a dire HTML) e altri file.

Se non dichiarato debole dal server, un ETag è considerato un forte validatore, e può quindi essere utilizzato per satify un condizionale richiesta di distanza. Tuttavia, la maggior parte generata automaticamente etags difficoltà esibiscono in situazioni di server farm, dal momento che spesso utilizzano le informazioni inode e / o di un contatore persistente unico. In pratica, ho trovato l'ultimo intestazione modificato in modo da essere sufficiente per il contenuto piuttosto statico, per esempio servendo contenuti statici protetto, dato che il tempo di scrittura del file fa un ragionevolmente buona validatore.

L'ETag è di gran lunga la più flessibile. Conforme clienti sono tenuti a inviare l'ETag in una richiesta condizionale, mentre dovrebbero inviare entrambi se disponibili.

Il If-Modified-Since viene utilizzato per specificare l'ora in cui il browser scorso ha ricevuto la risorsa richiesta. L'intestazione If-None-Match viene utilizzato per specificare il tag entità che il server rilasciato la risorsa richiesta quando è stato percepito.

Nei due modi descritti, queste intestazioni sono utilizzati per supportare la memorizzazione nella cache di contenuti all'interno del browser, e abilitare il server per indicare al browser per utilizzare una copia cache di una risorsa, piuttosto che rispondere con l'intero contenuto della risorsa se questo non è necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top