Quale potrebbe essere la differenza tra if-modified-since e if-none-match? Ho la sensazione che if-none-match venga utilizzato per i file mentre if-modified-since viene utilizzato per le pagine?
Risposte:
Per quanto riguarda le differenze tra Last-Modified/If-Modified-Since
e ETag/If-None-Match
:
Entrambi possono essere usati in modo intercambiabile. Tuttavia, a seconda del tipo di risorsa e di come viene generata sul server, potrebbe essere più facile rispondere all'una o all'altra domanda ("è stata modificata da ...?" / "Corrisponde ancora a questo ETag?") .
Esempi:
mtime
come Last-Modified
data è la soluzione più semplice.ETag
sarà molto più semplice. Vedere questi collegamenti per maggiori dettagli sull'argomento:
If-Modified-Since
viene confrontata con la Last-Modified
, mentre If-None-Match
viene confrontato ETag
. Entrambi Modified-Since
e ETag
possono essere utilizzati per identificare una variante specifica di una risorsa.
Ma il confronto di If-Modified-Since
a Last-Modified
ti dà le informazioni se la variante memorizzata nella cache è più vecchia o più recente, mentre il confronto di If-None-Match
a ETag
ti dà solo le informazioni se entrambe sono identiche o meno. Inoltre, la maggior parte dei ETag
generatori include le informazioni dell'inode specifico del sistema, quindi spostare un file su un'unità diversa potrebbe cambiare ETag
anche le.
Il valore di timestamp utilizzato in Last-Modified / If-Modified-Since ha una precisione limitata: un secondo e questo semplicemente non è sufficiente per modificare rapidamente i contenuti come, ad esempio, l'applicazione di chat Web in cui è possibile pubblicare più di un messaggio in un dato secondo . ETag / If-None-Match può aiutare a risolvere questo problema.
Come indicato nelle migliori pratiche di Google:
È importante specificare uno tra Expires o Cache-Control max-age e uno tra Last-Modified o ETag, per tutte le risorse memorizzabili nella cache. È ridondante specificare sia Expires che Cache-Control: max-age o specificare sia Last-Modified che ETag.
https://developers.google.com/speed/docs/best-practices/caching
Last-Modified
con ETag
(o, sul lato useragent, If-Modified-Since
con If-None-Match
). Allo stesso modo le specifiche W3 non ti limitano. Dice di non usare If-Modified-Since
con If-Match
, ma presumo sia perché il set di documenti che hanno date aggiornate ma lo stesso contenuto definito dall'ETag dovrebbe essere piuttosto piccolo.
If-Modified-Since utilizza una data, mentre If-None-Match utilizza un ETag . Possono essere utilizzati sia per "pagine" (cioè HTML) e altri file.
A meno che non sia dichiarato debole dal server, un ETag è considerato un validatore forte e può quindi essere utilizzato per soddisfare una richiesta con intervallo condizionale. Tuttavia, la maggior parte degli ETag generati automaticamente presenta difficoltà nelle situazioni di server farm, poiché spesso utilizzano informazioni inode e / o un contatore persistente univoco. In pratica, ho trovato che l'intestazione Last Modified è sufficiente per contenuti abbastanza statici, ad esempio per fornire contenuto statico protetto, poiché il tempo di scrittura del file è un validatore ragionevolmente buono.
L'ETag è di gran lunga il più flessibile. I client conformi devono inviare l'ETag in una richiesta condizionale, mentre DOVREBBERO inviarli entrambi se disponibili.
L'intestazione If-Modified-Since viene utilizzata per specificare l'ora in cui il browser ha ricevuto l'ultima volta la risorsa richiesta. L'intestazione If-None-Match viene utilizzata per specificare il tag di entità che il server ha emesso con la risorsa richiesta l'ultima volta che è stata ricevuta.
Nei due modi descritti, queste intestazioni vengono utilizzate per supportare la memorizzazione nella cache del contenuto all'interno del browser e consentono al server di istruire il browser a utilizzare una copia cache di una risorsa, piuttosto che rispondere con l'intero contenuto della risorsa se questo è non necessario.