2012-03-16 6 views
30

Abbiamo riscontrato un problema con la memorizzazione nella cache di Chrome di una risorsa sul nostro server Glassfish. Le estensioni e le intestazioni no-cache non vengono inviate e la risorsa (un file SWF di circa 4 MB) viene memorizzata nella cache da Chrome, nonostante la presenza dell'intestazione Last-Modified.Per quanto tempo Google Chrome memorizza nella cache una risorsa se scade e/o le intestazioni no-cache non sono impostate?

A volte Chrome riceve un codice 304 e altre volte semplicemente un 200 (dalla cache). Capisco il 304 - Chrome probabilmente controllerà la data Ultima modifica più recente con la versione cache per decidere. Ma altre volte fa il 200 (dalla cache), che non restituisce alcuna informazione di intestazione e sembra che Chrome stia semplicemente supponendo che il file non sia stato modificato invece di controllare.

Google's own site states il seguente:

HTTP/S supporta la memorizzazione nella cache locale delle risorse statiche dal browser. Alcuni dei browser più recenti (ad es. IE 7, Chrome) utilizzano un euristico per decidere per quanto tempo memorizzare nella cache tutte le risorse che non hanno intestazioni di cache esplicite .

Ma questo non fornisce una risposta definitiva. Questa euristica è pubblicata ovunque? Mi rendo conto che potrebbe non esserci una risposta fissa (come 30 giorni), ma alcune linee guida generali potrebbero essere utili. Inoltre, se si sta impostando Last-Modified, non capisco perché Chrome non si preoccupi di controllarlo prima.

+2

E _è_ pubblicato nella misura in cui la fonte di Chrome è liberamente disponibile. – cdeszaq

+0

ciao - hai trovato ulteriori informazioni su come è determinata questa euristica? Se la logica è effettivamente basata su DEFAULT_CACHE_TIME c'è un URI di Chrome in cui viene visualizzata questa impostazione? – andrew

risposta

9

DEFAULT_CACHE_TIME = 300

Ho trovato quanto sopra cercando in http://code.google.com/p/chromium/source/search?q=DEFAULT_CACHE_TIME&origq=DEFAULT_CACHE_TIME&btnG=Search+Trunk per "DEFAULT_CACHE_TIME".

C'è un file chiamato "chromeextensionsdocs.py" che contiene la DEFAULT_CACHE_TIME.

Io credo questo è secondi in base l'esempio dato a http://code.google.com/appengine/docs/python/memcache/overview.html
In "chromeextensionsdocs.py", il DEFAULT_CACHE_TIME viene inviata come ultimo param in memcache.add

io non sono del tutto sicuro se questo è il giusto valore o no ma sembra probabile che sia quando si mettono insieme i pezzi.

+0

Non ho alcuna conoscenza speciale di questo argomento, oltre alla lettura di alcuni articoli online. 'DEFAULT_CACHE_TIME' potrebbe essere l'impostazione predefinita per la memoria cache, ma [presumibilmente Chrome ha diverse cache, una delle quali è basata su disco] (http://gent.ilcore.com/2011/02/chromes-10-caches.html). Immagino che un file scadrà nella cache della memoria dopo 5 minuti, ma è potenzialmente nella cache del disco per molto più tempo. [Questo articolo] (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx) fornisce informazioni sul modo in cui IE9 determina quando la cache scadono i file senza policy. –

+4

L'unità di "300" è giorno? ore ? secondi? – Raptor

+0

Vedere risposta - "Credo che questo sia secondi in base a ..." –

-1
+0

-1; stai citando un RFC ufficialmente obsoleto nel 2014 (come mostrato nella parte superiore della pagina collegata), e comunque non risponde alla domanda. –

2

La volta che il browser considera una risposta in cache fresca è di solito rispetto a quando è stato modificato l'ultima:

Dal server di origine non sempre forniscono tempi di scadenza esplicite, una cache MAGGIO assegnare un tempo di scadenza euristico quando non è specificato un tempo esplicito, utilizzando algoritmi che utilizzano altri valori di campo di intestazione (come il tempo Last-Modified) ... Se la risposta ha un campo di intestazione Last-Modified (Sezione 2.2 di [RFC7232]), le cache sono incoraggiate ad utilizzare un valore di scadenza euristico che non è più di una frazione dell'intervallo da quel momento. Un'impostazione tipica di questa frazione potrebbe essere del 10%. [https://tools.ietf.org/html/rfc7234#section-4.2.2]

I dettagli di come Chrome (e altri browser) calcolano che il valore, può essere trovato nel codice sorgente (An example from Chrome v49). Sembra che Chrome calcoli anche il valore relativo all'intestazione Last-Modified.

(Credit to this post)

+0

Cosa succede se non c'è un'intestazione Last-Modified? – Phil

+0

Dipenderà dal browser che penso. L'esempio di codice che ho notato da Chrome ricade su "max_age_value" e l'intestazione Expires, penso ... – Jon

Problemi correlati