2015-04-17 14 views
7

Ecco un esempio molto semplice per illustrare la mia domanda utilizzando jQuery da una CDN per modificare la pagina:Perché il browser non carica il file cdn dalla cache?

<html> 
    <body> 
    <p>Hello Dean!</p> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
    <script>$("p").html("Hello, Gabe!")</script> 
    </body> 
</html> 

Quando si carica la pagina con una connessione internet, viene visualizzata la pagina "Ciao Gabe". Quando spengo la connessione Internet, la pagina visualizza "Ciao Dean" con un errore - JQuery non è disponibile.

La mia comprensione è che i CDN hanno un numero lungo Cache-Control e Expire nella risposta dell'intestazione, il che significa che il browser memorizza il file nella cache localmente.

$ curl -s -D - https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js | head 

HTTP/1.1 200 OK 
Server: cloudflare-nginx 
Date: Fri, 17 Apr 2015 16:30:33 GMT 
Content-Type: application/javascript 
Transfer-Encoding: chunked 
Connection: keep-alive 
Last-Modified: Thu, 18 Dec 2014 17:00:38 GMT 
Expires: Wed, 06 Apr 2016 16:30:33 GMT 
Cache-Control: public, max-age=30672000 

Ma questo non sembra accadere. Qualcuno può spiegare cosa sta succedendo? Inoltre, come posso ottenere che il browser utilizzi la copia di JQuery nella cache da qualche parte?

Questa domanda è nata perché vogliamo utilizzare le CDN per servire le librerie esterne, ma vogliamo anche essere in grado di sviluppare la pagina offline, come su un aereo.

Ho un comportamento simile con Chrome e Firefox.

+0

Sto solo iniziando a esaminare questo problema, ma hai trovato http://stackoverflow.com/q/5264783/2336725? – Teepeemm

+2

Dai un'occhiata per vedere se il file è effettivamente memorizzato nella cache nel tuo sistema su chrome nella barra degli indirizzi digita "about: cache". –

risposta

2

Non c'è niente da trattare con CDN. Quando poi il browser incontra un tag script, lo richiederà al server, sia esso ospitato su un CDN o sul tuo server. Se il browser lo ha caricato in precedenza, sullo stesso indirizzo, il server indica se deve essere ricaricato o meno (invio 304 HTTP status code).

Quello che stai probabilmente cercando è di memorizzare nella cache l'applicazione per l'utilizzo offline. È possibile con HTML5 cache manifest file. È necessario creare un file che elenca tutti i file necessari per la cache per l'uso offline esplicito

+0

Se 2 siti utilizzano lo stesso indirizzo CDN per jquery, condividono la risorsa memorizzata nella cache? O è specifico del sito? Mi chiedo quante copie di jquery ho nella mia cache. – gdbj

Problemi correlati