【转载】JsDelivr 备案被吊销后，网页静态资源何去何从
原文链接：https://huangxin.dev/partly-technical/in-response-to-jsdelivr-icp-license-revokement正文昨天，jsDelivr 团队主要负责人 Dmitriy Akulov 在 jsDelivr 官方 GitHub 仓库的一条 issue 下发表了以下说明：是的，昨天 jsDelivr 在国内的故障，并不是偶发的 SSL 证书出现问题导致资源下线，而是域名备案被吊销，导致国内 CDN 提供商网宿移除了 jsDelivr 的账号。目前 jsDelivr 国内线路为 Fastly：过去的一两年里，许多人发现了 jsDelivr 在速度上的巨大优势，开始用 jsDelivr 作为图床，甚至用 jsDelivr 来托管和翻墙软件的安装脚本。到后来 jsDelivr 更新了它的可接受使用政策（AUP），可惜当然滥用服务的各路神仙是不会理睬的，在他们的眼里，撸是常态，薅羊毛是理所当然，既然是免费的就要做好被撸爆的准备。所以，2021 1220 - 可喜可贺的一天，jsDelivr 的 ICP 没了。最少在短时间内，jsDelivr 是无法也不会提供基于国内节点的托管服务了。可以想象，也是可能的下一步，就是 jsDelivr 完全被 GFW 阻断，成为连 Google Hosted Libraries 和 cdnjs 都不如的开源 CDN - 最少这两个国内还极其勉强地能用。在这里，我强烈谴责无底线滥用 jsDelivr 的人们。Disclaimer文章发出后引起了一部分的关注。请注意本文，以及本文所提及的谴责，是因为有人用 jsDelivr 来托管翻墙脚本的事情 - 在国内网络上这很显然是不可行的，raw.githubsuercontent.com 和 gist.github.com 都因此被封锁，而在一个唯一提供国内网络加速的开源 CDN 上托管这些很明显会导致站点被封禁的脚本，无疑是极其不负责任，不顾后果的行为。诚然，我们的系统的的确确有问题，但是这并不能成为滥用一切可以滥用的以试图绕过限制（并且还无法改变根本事实）的理由。也可能会有人说，啊我就是自由战士，我就是要和体制对抗到底，jsDelivr 牺牲了就牺牲了，都是他们的问题！请注意，绝大部分用 jsDelivr 来托管脚本的人们，只是贪图一时的便利，他们可能觉得 jsDelivr 封不了（但是现在 ICP 没了），而没有考虑到可能的后果。更遑论那些直接用来做图床，文件下载的，就是本着滥用到底的想法。本文只是一个菜鸡 Web Developer 对于这些人的行为导致 jsDelivr 没有了中国线路的愤慨和不满而已，确实 jsDelivr 不该这么用（你看到 cdnjs 能被这么用吗），只是一个没有审核机制，人人可托管内容的服务，最后竟然成了它的漏洞。怎么办呢凉拌呗。目前能找到的最好的 jsDelivr 代替就是 cdn.baomitu.com，由 360 的网络基建背书（放心，没有隐私风险，也不会给你静默安装 360），海外接入了 CloudFront，全球速度极其优秀。完全镜像 cdnjs。只是无法用版本别名（如 unpkg.com/jquery@3），也不支持加速不在 cdnjs 上的项目（i.e. 自有项目）。当然也是没办法合并文件的。jsDelivr 仅此一家，没了就是没了。字节跳动静态资源公共库（cdn.bytedance.com）也是一个理想的替代，只不过他的更新频率很不频繁，jQuery 到现在都只停留在 3.5.1 的版本号上（最新版本是 ）。如果要使用的话记得替代他提供的域名到 s1.pstatp.com（网宿 CDN，全球加速）或者 s2.pstatp.com （阿里云 CDN，全球加速）。其他的 BootCDN，Staticfiles 之类的维护比较混乱，不推荐使用。自有资源怎么办呢自己写了 js/css，但是显然不够格上 cdnjs，所以也没办法从上面的渠道调用，jsDelivr 又没了国内节点，怎么办呢？是有办法的，虽然不完美，但是我是不会在这里说的。所以要么自己托管，要么自己想办法。写在最后从第一次用 jsDelivr 以来，起码已经有三年时间了吧。也有常常关注这个项目，也和 Dmitriy 邮件交流过几次，了解过一些这个项目的进展。这是一个非常好非常好的项目，也对国内的网页开发者们助力非常大，ICP 没了十分可惜，但也于事无补。下一步我会尝试和 Dmitriy 沟通，提供一些我的想法，希望能够让 jsDelivr 在国内重现天日。最后再次谴责无底线滥用 jsDelivr 的人们。再也不是一片绿了
关于BackblazeBackblaze是一个成立于2007年，致力于为用户提供低廉的在线备份服务的国外在线备份和存储服务商。Backblaze B2是Backblaze推出的云存储服务，主要用于存储文件、在线上传和下载、共享浏览和播放视频等并且提供了丰富的API。Backblaze为每位用户提供免费10GB的存储额度，1天1GB的流量，从上图可以看出超额的存储是$0.005/GB/月，流量是$0.01/GB，价格基本是AWS S3的1/4左右。所以如果不考虑国内访问速度的话，应该是非常不错的选择。由于 B2 与 CloudFlare 合作，所以套上 CloudFlare 后并不会消耗流量，所以非常适合拿来做图床。比如ImgURL Pro就支持上传和存储图片到Backblaze B2。Backblaze账户注册Backblaze官网地址：https://www.backblaze.com/Backblaze注册入口：https://www.backblaze.com/b2/sign-up.html如果你也对Backblaze感兴趣可以通过上面网址进行注册。填入邮箱地址和密码后直接注册即可，就不贴图了。注册成功后用你的邮箱地址和密码登录，会提示让你添加电话号码，按照下图直接进入设置，添加电话号码并验证后就完成了注册，如果没有收到验证邮箱的邮件，可以到设置里验证一下就行，接下来就可以使用Backblaze B2存储服务了。创建/设置存储桶接下来我们直接创建一个存储桶，操作也十分简单，看下图。点击左侧的 桶（Buckets）-- 创作一个桶 -- 输入存储桶唯一标识（6位以上）-- 权限选择公众 -- 创建即可获取API KEY及存储桶参数创建好存储桶以后，就可以上传文件了，上传的文件可以在浏览档案项查看文件外链如果我们要使用API调用Backblaze B2的话，需要获取到以下几个重要参数：桶身份证（Buckets ID）：左侧菜单“ B2云存储 ” -- 桶，右侧存储桶信息里就可以看到“桶身份证”，把它记录下来。（见上图）“ KeyID ”和“ 主程序密钥 ”：点击左侧菜单“ 应用程序键（App Keys）”，右侧就可以看到“ KeyID ”，然后点击“ 生成新的主应用程序密钥 ”（只会出现一次，请妥善保存）。（见下图）文件外链地址：点击“ 上传/下载按钮 ”，随便上传一个文件，点击文件详情，获取友好的URL地址。（见下图）比如上图中的文件的友好URL：https://f002.backblazeb2.com/file/vpsimg/701b59d324821930c9e6a6b32806c736be2ed3ae86b8d-LPkZUl.jpg我们需要的就是上面链接中的前面部分：https://f002.backblazeb2.com/file/vpsimg/上面链接末尾必须要带有斜杠 /这时，我们就可以将上面获取的四个参数设置到对应的项目中即可调用Backblaze B2的文件了。比如ImgURL Pro，我们将 KeyID 、主程序密钥、桶身份证 填入 config.php 里，将上面获取的 文件外链地址 填入后台存储方案 ，绑定域名即可。接入CloudFlare CDN虽然Backblaze B2已经足够便宜，本着能省则省的原则，我们可以按照官方博客的方法将B2接入CloudFlare CDN进行缓存，从而进一步节省流量开支。1、首先将你的域名接入 CloudFlare ，然后将域名CNAME解析到你的B2域名（即我们上面获取到的文件外链地址域名 f002.backblazeb2.com ）。比如：我在CloudFlare接入的域名为img.niege.ga，在我将 niege.ga 接入CF以后，在域名管理页面，点击 DNS 然后添加一条名称为 img 、类型为 CNAME 、目标为f002.backblazeb2.com 、并且打开代理的黄色小云朵。接入CloudFlare的更多说明可以参考官方博客：Using Backblaze B2 with the Cloudflare CDN2、然后点击 规则(Page Rules) 页面的创建页面规则按钮。重写规则为https://<刚才解析的域名>/file/<存储桶>/*比如我这里就是：https://img.niege.ga/file/vpsimg/*设置选择：缓存级别 -- 缓存所有内容保存并部署设置Backblaze B2虽然启用了CloudFlare CDN，但发现缓存永远不能命中（MISS），我们需要对添加一个缓存指令（默认是不缓存）。打开存储桶设置，桶信息设置为{"cache-control":"max-age=43200"}，其中43200单位为秒(s)，意思就是说43200秒内CF不会去从源站重新获取资源。（见下图）通过浏览器F12调试工具已经可以看到请求命中了CF缓存。（见下图）
今天不知道写点啥，刚才看网站后台，发现加载了个instant.page的JS，干脆就水一篇关于instant.page的文章吧。关于instant.pageinstant.page官网：https://instant.pageinstant.page宣称可让网站加载时间缩短到 1 分钟以内，并提高 1% 的转化率。其作用是可以预加载用户想访问的页面，当用户真正点击链接后，就会直接从缓存中读取，以此提升网站的访问速度。instant.page 原理的话我们不必深层了解，只需知道：使用即时预加载技术，在用户点击之前预先加载页面。当用户的鼠标悬停在一个链接上超过 65 毫秒时，浏览器会对此页面进行预加载，当用户点击链接后，就从预加载的缓存中直接读取页面内容，从而达到缩短页面加载时间的目的。instant.page 是渐进式增强 - 对不支持它的浏览器没有影响。使用 instant.page 会显著增加自己的网站的 PV 以及请求量。使用 instant.page 只会预加载 html 页面，而不会加载图片等资源。因此点击预加载的页面是秒开的，图片在点击之后才会加载，不用担心与 lazyload 的各种不兼容问题。使用方法一、使用官方提供的带有 Cloudflare 加速的脚本建议服务器在国外的朋友使用。只要把这行代码添加到网站的 标签之前即可。（一般都可以在后台直接添加） 二、使用国内公共CNDJsdelivr 字节跳动 BOOTCDN 二。自托管建议服务器在国内的朋友使用。只需将下面这段 js 点击查看上传到自己服务器，然后在 标签之前根据路径添加下面的代码即可。 参考文章instant.page官网网站预加载JS脚本 instant.page
CDN的全称是Content Delivery Network，即内容分发网络。CDN是构建在网络之上的内容分发网络，依靠部署在各地的边缘服务器，通过中心平台的负载均衡、内容分发、调度等功能模块，使用户就近获取所需内容，降低网络拥塞，提高用户访问响应速度和命中率，CDN的关键技术主要有内容存储和分发技术。但是，放在Github的资源在国内加载速度比较慢，因此需要使用CDN加速来优化网站打开速度，jsDelivr + Github便是免费且好用的CDN，非常适合博客网站使用。1、新建Github仓库2、克隆Github仓库到本地点击 Clone or download，一键复制仓库地址在本地目录右键 Git Bash Here，执行以下命令：git clone 一键复制的仓库地址3、上传资源复制需要上传的资源到本地git仓库（注：jsDelivr不支持加载超过20M的资源），在本地git仓库目录下右键 Git Bash Here，执行以下命令：git status //查看状态 git add . //添加所有文件到暂存区 git commit -m '第一次提交' //把文件提交到仓库 git push //推送至远程仓库4、发布仓库5、通过jsDelivr引用资源使用方法https://gcore.jsdelivr.net/gh/你的用户名/你的仓库名@发布的版本号/文件路径例如https://gcore.jsdelivr.net/gh/love2wind/imgbed@1.1/logo.png[scode type="info"]注意：版本号不是必需的，是为了区分新旧资源，如果不使用版本号，将会直接引用最新资源，除此之外还可以使用某个范围内的版本，查看所有资源等。[/scode]使用方法如下：// 加载任何Github发布、提交或分支https://gcore.jsdelivr.net/gh/user/repo@version/file// 加载 jQueryv3.2.1https://gcore.jsdelivr.net/gh/jquery/jquery@3.2.1/dist/jquery.min.js// 使用版本范围而不是特定版本https://gcore.jsdelivr.net/gh/jquery/jquery@3.2/dist/jquery.min.jshttps://gcore.jsdelivr.net/gh/jquery/jquery@3/dist/jquery.min.js// 完全省略该版本以获取最新版本https://gcore.jsdelivr.net/gh/jquery/jquery/dist/jquery.min.js// 将“.min”添加到任何JS/CSS文件中以获取缩小版本，如果不存在，将为会自动生成https://gcore.jsdelivr.net/gh/jquery/jquery@3.2.1/src/core.min.js// 在末尾添加 / 以获取资源目录列表https://gcore.jsdelivr.net/gh/jquery/jquery/