一个帮你实时刷新jsdelivr CDN缓存的小工具

码农天地 -
一个帮你实时刷新jsdelivr CDN缓存的小工具
参考QQ群 - Javascript高级爬虫 - 作者自建Q群,欢迎加入!项目地址 - 建议克隆后自建服务作者自建服务 - 随时关闭,勿用力过猛!概述

一个小服务,可以部署在你自己的服务器上。
可以自动刷新jsdelivr CDN缓存,帮助你更有效率的利(bai)用(piao) Github的存储空间和jsdelivr cdn的带宽流量。

原理

在神州大地上,因为众所周知的原因,github访问的速度很慢,甚至有时候会完全中断,让我们没法愉快的充分利用github提供的优质仓储。
好在有了jsdelivr,免费为github所有的仓库做CDN,连国内都可以极速访问!
不过jsdelivr还有个小小的问题,就是不能及时刷新缓存,github仓库更新后,缓存会在24小时内刷新。
一般的CDN会提供强制刷新/回源(purge)机制,然而为了防止滥用,jsdelivr并没有开放此API,据说需要写邮件给jsdelivr说明原因才能开通,让一众白嫖怪们不禁抚掌兴叹。
还好,还有个窗户可以爬,可以达到类似强制刷新的效果,就是github仓库更新后,创建一个新的release,然后用https://cdn.jsdelivr.net/gh/user/repo@tag/path/to/resource的方法请求资源,其中tag就是release的名字。

本项目就是基于这个机制:

监听Github的Webhook,当接收到仓库的push事件时,立即调用Github API自动创建一个新的release。外部应用引用仓库资源时,可以使用指向本服务的固定URL,本服务解析该URL,将其映射为添加了最新的release版本的CDN地址并自动跳转。本服务中对仓库和release之间有内存缓存,即使不配置Webhook,也可做到10分钟内刷新。使用步骤

强烈建议你clone本仓库并在你自己的服务器上本地部署。
少量使用可以直接使用这个地址:http://gh.qbot.fun/
这是作者本人的服务器,如果发现服务不可用,请QQ联系17219193
以下步骤皆以此地址作为例子。

Github账户中添加Token:

Github任意页面中,依次点击:右上角头像 -> Settings -> Developer Settings -> Personal access tokens点击Generate new tokenNotes中随便输入个名字,Select scopes中,确保repo及其子项目全部选中,然后点击Generate Token把产生的token,一个40位的16进制字符串记住。重要:此token只显示这一次,如果没记住只能删除重建调用下面的API添加Github账户名和对应的Token:
http://gh.qbot.fun/addToken?user=Github账户名&token=上步获取的Token
本项目需要使用此Token调用Github API以刷新release

为Github仓库创建Webhook:

Github仓库页面中,依次点击:Settings -> Webhooks点击Add webhook页面中:Payload URL填入http://gh.qbot.fun/webhook,Content type选择application/json;其它项目保持默认,点击Add webhook添加成功后会立即向Webhook地址推送一次,你可以在下面的Recent Deliveries中看到最近的推送日志;
点击右面的三点按钮,即可看到推送的请求和应答日志,正常的应答body应该是okno commit

至此,仓库任意资源即可访问!
仓库内的任意资源地址做如下映射即可正常使用:
https://github.com/user/repo/path/to/resource -> http://gh.qbot.fun/user/repo/path/to/resource
仓库中有任何添加、修改、删除等动作,使用此地址访问资源都会实时刷新!
注意:

此地址返回的是一个302跳转,将重定向到jsdelivr上对应资源的最新release版的URL上去,即https://cdn.jsdelivr.net/gh/user/repo@release/path/to/resource首次访问会创建release,jsdelivr也需回源,会比较慢,以后就会非常快了也可以不用服务提供的跳转机制,而是在客户端自行组装资源URL,这样速度更快,推荐用此方案!
访问http://gh.qbot.fun/user/repo/即会返回当前的最新release的tag
客户端可以缓存此tag,并自行拼装最终资源地址,即:
https://cdn.jsdelivr.net/gh/user/repo@release/path/to/resource其它说明感谢Github无私的提供免费存储空间,感谢jsdelivr无私的提供免费带宽流量!请勿过于频繁的向资源仓库中推送更新,导致release过于频繁的刷新,从而让jsdelivr不堪其负乃至最后关闭了这个免费服务!作者提供的服务器是1M带宽的腾讯学生机,难堪伐挞,仅供测试或少量使用,强烈建议您在自己的服务器上本地部署!从国内访问Github API很不稳定,因此本项目中使用了某乳,如果你可以部署在海外服务器上,则可以删除利用代理的部分代码。
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

加个好友,技术交流

1628738909466805.jpg