2010-07-31 9 views
17

Se eseguo una verifica sui miei siti con Google Chrome, ottengo questo messaggio nel browser caching sezione Leverage:di revisione Google Chrome su caching

Le seguenti risorse manca una scadenza cache. Risorse che non si specifica una scadenza non possono essere memorizzate nella cache dai browser:

un elenco di tutte le immagini di seguito. Ottengo un avviso simile in Leverage caching proxy:

considerare l'aggiunta di un "Cache-Control: pubblico" intestazione per i seguenti risorse:

A parte le immagini, ho anche ottenere una avviso sui file HTML, CSS e JavaScript:

Le seguenti risorse sono esplicitamente non memorizzabili nella cache. Si consideri che li rende cacheable, se possibile:

E 'divertente perché ho lavorato duramente per memorizzare nella cache tutti i contenuti statici (tranne che per le immagini, dove ho appena lasciato impostazioni di default di Apache). Firefox salva effettivamente tutti questi elementi nella cache.

C'è qualcosa che dovrei migliorare nelle mie intestazioni HTTP?


Ecco il set di intestazione completo di alcuni elementi come caricati dopo aver rimosso il browser caché. Le immagini utilizzano le impostazioni predefinite che non ho veramente controllato prima, il resto dovrebbe essere cached per tre ore. Posso impostare le intestazioni con sia .htaccess e PHP.

PNG

HTTP/1.1 200 OK 
Date: Sat, 31 Jul 2010 12:46:14 GMT 
Server: Apache 
Last-Modified: Thu, 18 Mar 2010 21:40:54 GMT 
Etag: "c48024-230-4821a15d6c580" 
Accept-Ranges: bytes 
Content-Length: 560 
Keep-Alive: timeout=4 
Connection: Keep-Alive 
Content-Type: image/png 

HTML

HTTP/1.1 200 OK 
Date: Sat, 31 Jul 2010 12:46:13 GMT 
Server: Apache 
X-Powered-By: PHP/5.2.11 
Expires: Sat, 31 Jul 2010 15:46:13 GMT 
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Last-Modified: Wed, 24 Mar 2010 20:30:36 GMT 
Keep-Alive: timeout=4 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: text/html; charset=ISO-8859-15 

CSS

HTTP/1.1 200 OK 
Date: Sat, 31 Jul 2010 12:48:21 GMT 
Server: Apache 
X-Powered-By: PHP/5.2.11 
Expires: Sat, 31 Jul 2010 15:48:21 GMT 
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Last-Modified: Thu, 18 Mar 2010 21:40:12 GMT 
Keep-Alive: timeout=4 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: text/css 

JavaScript

HTTP/1.1 200 OK 
Date: Sat, 31 Jul 2010 12:48:21 GMT 
Server: Apache 
X-Powered-By: PHP/5.2.11 
Expires: Sat, 31 Jul 2010 15:48:21 GMT 
Cache-Control: max-age=10800, s-maxage=10800, must-revalidate, proxy-revalidate 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Last-Modified: Thu, 18 Mar 2010 21:40:12 GMT 
Keep-Alive: timeout=4 
Connection: Keep-Alive 
Transfer-Encoding: chunked 
Content-Type: application/x-javascript 

Aggiornamento

Ho provato il suggerimento di Jumby e impostare il mio CSS scadenza a 1 anno:

Cache-Control:max-age=31536000, s-maxage=31536000, must-revalidate, proxy-revalidate 
Connection:Keep-Alive 
Content-Encoding:gzip 
Content-Length:4198 
Content-Type:text/css 
Date:Mon, 02 Aug 2010 20:48:56 GMT 
Expires:Tue, 02 Aug 2011 20:48:56 GMT 
Keep-Alive:timeout=5, max=99 
Last-Modified:Thu, 18 Mar 2010 20:40:12 GMT 
Server:Apache/2.2.14 (Win32) PHP/5.3.1 
Vary:Accept-Encoding 
X-Powered-By:PHP/5.3.1 

Tuttavia, Chrome sostiene ancora "esplicitamente non-cacheable".

+0

Appena ottenuto un problema simile, qualunque cosa faccia, il controllo di Chrome continua a bugging. – axkibe

risposta

4

La scadenza di 3 ore potrebbe non essere sufficiente "tempo" per il flusso di lavoro/velocità della pagina e potrebbero lamentarsi. Ho visto questo con contenuto statico sui miei siti con scadenza 4 ore & yslow (non ho provato con roba di google).

La maggior parte di quelli desidera il contenuto statico con versioni con tempi di scadenza lunghi (come 1 anno); vedi here

+0

Ho provato il tuo suggerimento (vedi il mio post modificato) ma Chrome si lamenta ancora. Sono tentato di ignorarlo e utilizzare un altro strumento. Persino Chrome carica i documenti da Caché quando visito la pagina in seguito. –

+1

Provare ad eliminare/modificare le intestazioni per vedere se è possibile determinare quale causa. Vorrei provare con Cache-Control: pubblico. Inoltre, verifica redbot.org e inserisci un URL per il tuo contenuto statico. –

+3

http://redbot.org è un ottimo strumento (e spiega anche perché "Cache-Control: public" non è necessario nella maggior parte dei casi). Devo dare un'occhiata più da vicino al caching dei contenuti statici, ma credo che la funzionalità di Audit di Chrome sia solo buggata. –

2

Il problema è la parte "must-revalidate" della direttiva di controllo della cache. Sbarazzati di questo, e dovresti essere bravo a farlo.

+0

Sì, ma perché è un problema? Il messaggio di Chrome è fuorviante? errata? Sottilmente corretto? –

+0

Posso verificare che la rimozione di 'must-revalidate' impedisca all'audit di Chrome di lamentarsi del fatto che quegli endpoint non sono accessibili. Questo non sembra avere senso dato il comportamento descritto nella RFC. Mi chiedo come Chrome gestisca "must-revalidate' ... – wprl

0

Ho appena avuto un problema simile, ho scoperto lo stesso setup e il codice produce un avviso di controllo di cromo quando provo sul mio server di test a 127.0.0.1, ma non sul vero server con un vero nome DNS.