html5 – 为什么浏览器不从缓存中加载cdn文件?

这是一个非常简单的例子来说明我使用CDN中的 JQuery修改页面的问题:
<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>

当您使用互联网连接加载此页面时,页面显示“Hello Gabe”.当我关闭互联网连接时,页面显示“Hello Dean”并显示错误 – JQuery不可用.

我的理解是CDN在头响应中有一个很长的Cache-Control和Expire,我理解这意味着浏览器在本地缓存文件.

$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

但这似乎并没有发生.有人可以解释一下发生了什么吗?另外 – 我怎样才能让浏览器在某个地方的缓存中使用JQuery的副本?

出现这个问题是因为我们希望使用CDN来服务外部库,但也希望能够离线开发页面 – 就像在飞机上一样.

我使用Chrome和Firefox获得了类似的行为.

解决方法

没有什么可以处理CDN.当浏览器遇到脚本标记时,它会向服务器请求它,无论它是托管在CDN上还是托管在服务器上.如果浏览器先前加载了它,则在同一地址上,服务器会告诉它是否应该重新加载(发送 304 HTTP status code).

您可能正在寻找的是缓存您的应用程序以供离线使用.这可能是HTML5 cache manifest file.您需要创建一个文件,列出需要缓存的所有文件以供显式脱机使用

相关文章

HTML5和CSS3实现3D展示商品信息的代码
利用HTML5中的Canvas绘制笑脸的代码
Html5剪切板功能的实现
如何通过HTML5触摸事件实现移动端简易进度条
Html5移动端获奖无缝滚动动画实现
关于HTML5和CSS3实现机器猫的代码