2012-02-07 6 views
5

Ho un'applicazione di scrittura basata su Web con un server Web personalizzato e sto riscontrando problemi con i browser Webkit che non memorizzano nella cache immagini, fogli di stile e javascript.Webkit non viene memorizzato nella cache quando sono disponibili entrambe le intestazioni max-age e Last-Modified

L'ho rintracciato in una relazione tra Cache-Control: max-age e Last-Modified. Se entrambi vengono specificati, il webkit sembra ignorare l'intestazione max-age e verificare se il file è stato modificato OGNI volta che la risorsa viene utilizzata. Il sito ha un iframe nella prima pagina e risulta in fogli di stile, ecc. Che vengono richiesti due volte in un secondo!

Se si rimuove l'ultima modifica, i file non verranno richiesti nuovamente fino al giorno successivo; tuttavia, le richieste del giorno successivo non saranno più modificate se modificate, dal momento che richiedono al server di inviare nuovamente tutto anziché solo un'intestazione 304.

Su IE9, Firefox 10.0 e Opera 11.61 alle cache del browser in modo corretto e non richiedere nuovamente le immagini, solo il codice HTML, che ha una Cache-Control: l'attributo di intestazione no-cache.

Su Chrome 16.0.912.77 me Safari 5.1.2 (7534.52.7) viene eseguita una richiesta condizionale per ogni immagine su ogni pagina, ogni volta. Il server risponde con un'intestazione 304, che contiene ancora l'attributo max-age, ma entrambi continuano a richiedere.

Un colpo di testa esempio HTTP sto inviando con una risposta è:

HTTP/1.1 200 OK 
Date: Mon, 06 Feb 2012 15:12:12 GMT 
Cache-Control: max-age=86400 
Content-length: 708 
Content-type: image/gif 
Last-Modified: Fri, 6 Jan 2012 14:39:07 GMT 
Server: Webspring 

Qualcuno ha qualche suggerimento su come posso ottenere questi browser a tutti rispettare i miei intestazioni di cache?

Tutti i browser sono in esecuzione su Win7 Pro x64 e l'intestazione HTTP sopra è l'output non elaborato di Fiddler, quindi è esattamente ciò che il browser sta ricevendo.

Nota: avevo già fatto una domanda precedente prima di scoprire che si trattava di un'interazione tra i campi dell'intestazione. Ho eliminato la domanda precedente poiché non era più accurata.

Grazie

Mog

+0

Hai mai diagnosticato la causa o trovato una soluzione a questo problema? Stiamo osservando ripetute richieste GET condizionali su ogni immagine su Mac OS X 10.8.2 con browser basati su webkit (Chrome/Safari), ma Firefox memorizza correttamente nella cache. –

+0

In realtà rimuoviamo l'attributo modificato per ultimo per Chrome e Safari, in modo che almeno un po 'di cache. Non ho mai trovato una soluzione migliore mi dispiace. – Mog0

risposta

0

ho avuto lo stesso problema, ma non è stato WebKit larga; Safari e Chrome in incognito funzionano bene. Ho provato a disabilitare tutte le estensioni che non hanno fatto alcuna differenza, ma cancellare l'intero cache sembrava averlo risolto.

La mia ipotesi è che se si aggiunge l'intestazione Cache-Control al tuo sito per la prima volta, Chrome non sovrascrive correttamente le vecchie intestazioni nella sua cache. Ciò pone alcuni problemi nel far rientrare correttamente gli utenti esistenti nelle nuove impostazioni della cache.