2015-04-17 16 views
7

Oto bardzo prosty przykład do zilustrowania moje pytanie użyciu JQuery z CDN aby zmodyfikować stronę:Dlaczego przeglądarka nie ładuje pliku cdn z pamięci podręcznej?

<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> 

Podczas ładowania strony z dostępem do Internetu, wyświetlania strony „Hello Gabe”. Kiedy następnie wyłączam połączenie internetowe, na stronie wyświetla się komunikat "Hello Dean" z błędem - JQuery nie jest dostępny.

Rozumiem, że CDN mają długą odpowiedź Cache-Control i Expire w nagłówku, co rozumiem, że przeglądarka buforuje plik lokalnie.

$ 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 

Ale tak się nie dzieje. Czy ktoś może wyjaśnić, co się dzieje? Ponadto - w jaki sposób można uzyskać przeglądarkę, aby użyć kopii JQuery w pamięci podręcznej gdzieś?

To pytanie pojawiło się, ponieważ chcemy używać CDN do obsługi bibliotek zewnętrznych, ale chcemy też móc rozwijać stronę w trybie offline - jak w samolocie.

Podobne zachowanie występuje w Chrome i Firefox.

+0

Właśnie zaczynam zaglądać w ten problem, ale czy znalazłeś http://stackoverflow.com/q/5264783/2336725? – Teepeemm

+2

Zobacz, czy plik jest rzeczywiście zapisany w pamięci podręcznej w systemie na chrome w pasku adresu typu "about: cache". –

Odpowiedz

2

Nie ma nic do czynienia z CDN. Kiedy następnie przeglądarka napotka znacznik skryptu, poprosi o to na serwer, niezależnie od tego, czy jest hostowany w sieci CDN, czy na serwerze. Jeśli przeglądarka wczytała go wcześniej, na tym samym adresie, serwer mówi, czy należy go ponownie załadować, czy też nie (wysyłając 304 HTTP status code).

Prawdopodobnie szukasz pamięci podręcznej aplikacji do użytku offline. Jest to możliwe z HTML5 cache manifest file. Musisz utworzyć plik z listą wszystkich plików potrzebnych do buforowania w celu jawnego użycia w trybie offline.

+0

Jeśli 2 witryny używają tego samego adresu CDN dla jquery, czy współużytkują buforowany zasób? Czy jest to witryna specyficzna? Zastanawiasz się, ile kopii jquery mam w mojej pamięci podręcznej. – gdbj

Powiązane problemy