2015-04-17 5 views
7

Hier ist ein sehr einfaches Beispiel meine Frage mit JQuery von einem CDN zu veranschaulichen die Seite zu ändern:Warum lädt der Browser die cdn-Datei nicht aus dem 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> 

Wenn Sie laden Sie diese Seite mit Internet-Anschluss, zeigt die Seite „Hallo Gabe“. Wenn ich dann die Internetverbindung ausschalte, zeigt die Seite "Hallo Dean" mit einem Fehler an - JQuery ist nicht verfügbar.

Mein Verständnis ist, dass CDNs haben eine lange Cache-Control und Expire in der Header-Antwort, die ich verstehe, dass der Browser die Datei lokal zwischenspeichert.

$ 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 

Aber das scheint nicht zu geschehen. Kann mir bitte jemand erklären, was vor sich geht? Außerdem - wie kann ich den Browser dazu bringen, die Kopie von JQuery irgendwo im Cache zu verwenden?

Diese Frage kam, weil wir CDNs verwenden möchten, um externe Bibliotheken zu bedienen, aber auch in der Lage sein möchten, die Seite offline zu entwickeln - wie in einem Flugzeug.

Ich bekomme ein ähnliches Verhalten mit Chrome und Firefox.

+0

Ich fange gerade an, in dieses Problem auch zu schauen, aber hast du http://stackoverflow.com/q/5264783/2336725 gefunden? – Teepeemm

+2

Schauen Sie nach, ob die Datei tatsächlich in Ihrem System in Chrome im Adressleisten-Typ "about: cache" zwischengespeichert ist. –

Antwort

2

Es gibt nichts mit CDN zu tun. Wenn der Browser dann auf ein Skript-Tag stößt, wird es vom Server angefordert, unabhängig davon, ob es auf einem CDN oder auf dem Server gehostet wird. Wenn der Browser zuvor unter derselben Adresse geladen wurde, teilt der Server mit, ob er neu geladen werden sollte (Senden der 304 HTTP status code).

Was Sie wahrscheinlich suchen, ist Ihre Anwendung für die Offline-Nutzung zwischenzuspeichern. Es ist möglich mit HTML5 cache manifest file. Sie müssen eine Datei mit allen Dateien erstellen, die für die explizite Offline-Verwendung zwischengespeichert werden müssen.

+0

Wenn zwei Sites die gleiche CDN-Adresse für jQuery verwenden, teilen sie die zwischengespeicherte Ressource? Oder ist es ortsspezifisch? Ich frage mich, wie viele Kopien von jquery ich in meinem Cache habe. – gdbj