全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 3597|回复: 32
打印 上一主题 下一主题

[经验] sw黑科技绕过北岸&智能CDN前端切换

[复制链接]
跳转到指定楼层
1#
发表于 2022-1-6 20:59:25 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 ChenYFan 于 2022-1-7 08:17 编辑

众所周知2021/12/20JSdelivr掉北岸,我们痛失一枚国内外同时加速的利器。

国内的zhimg、bdstatic、elemecdn对海外支持并不佳,因此,寻找一种全球加速的cdn几乎成为了奢望。

【提前声明一下,并行请求这一思想确实是从FreeCDN学习过来的,但是代码内容和实现方式完全不一样,欢迎指正】

刚好手头有ServiceWorker这一誉为“浏览器中的服务器”这一利器,不发挥一下余热怎么能行呢。

核心代码promise.any并行请求


  1. const PauseProgress = async (res) => {
  2.             return new Response(await (res).arrayBuffer(), { headers: res.headers });
  3.         };
  4.         let results = Promise.any(urls.map(urls => fetch(urls, {
  5.             signal: controller.signal
  6.         }).then(PauseProgress).then(res => {
  7.             controller.abort();
  8.             return res
  9.         })));
复制代码


对于同一个网址,sw将会同时请求四家CDN,并且只要有一个cdn响应,其余请求自动打断【即只取反应速度最快的】。

例如,请求
  1. https://cdn.jsdelivr.net/npm/chenyfan-happypic/1.jpg
复制代码
,将会同时请求:

  1. https://cdn.jsdelivr.net/npm/chenyfan-happypic/1.jpg
  2. https://unpkg.com/chenyfan-happypic/1.jpg
  3. https://unpkg.zhimg.com/chenyfan-happypic/1.jpg
  4. https://npm.elemecdn.com/chenyfan-happypic/1.jpg
  5. https://code.bdstatic.com/npm/chenyfan-happypic/1.jpg
复制代码



这种流量换速度的方式除了并发对浏览器压力比较大,其流量几乎没有多余的浪费【反应慢的还没请求完就直接打断】,用这种方法,一张7M的图片几乎只要700ms即可加载完成。

关于绕备

sw附带功能,移花接木**,看得懂的自然看得懂,我就不过多阐述了。

服务器在广州,ZeroSSL IP证书,非标准端口


博客就是用sw加速和绕备的,有兴趣可以看看
博客:https://blog.cyfan.top
33#
 楼主| 发表于 2022-1-10 08:20:24 | 只看该作者
htazq 发表于 2022-1-9 20:02
大佬就是大佬,现在可以打开了,能做个友链吗

之前应该是sw脚本有问题,新版本没事就行。

友链的话你要去我的github仓库阅读要求并提交pr,统一审核过后自动添加
32#
发表于 2022-1-9 20:02:03 | 只看该作者
ChenYFan 发表于 2022-1-9 18:37
浏览器版本?手机还是电脑,打不开是指都一次打不开还是刷新后打不开?解析的ip是多少?控制台有无报错? ...

大佬就是大佬,现在可以打开了,能做个友链吗
31#
 楼主| 发表于 2022-1-9 18:39:09 | 只看该作者
taiyi747 发表于 2022-1-7 18:31
为什么不通过一段代码,利用x-real-ip之类的得到的ip,套用api判断是国内还是国外,国内请求国内的,国外的 ...

尤其在于,有些资源部分镜像是没有的,用并行能达到绝对的最好体验,而这前端是完全做不到的
30#
 楼主| 发表于 2022-1-9 18:37:25 | 只看该作者
htazq 发表于 2022-1-7 18:25
大佬你博客打不开了

浏览器版本?手机还是电脑,打不开是指都一次打不开还是刷新后打不开?解析的ip是多少?控制台有无报错?
29#
 楼主| 发表于 2022-1-9 18:32:47 | 只看该作者
taiyi747 发表于 2022-1-7 18:31
为什么不通过一段代码,利用x-real-ip之类的得到的ip,套用api判断是国内还是国外,国内请求国内的,国外的 ...


拦截全面,毕竟这样我的服务器完全不需要计算,只需要单独提供静态资源即可。而且能获得用户最真实的体验。倘若js请求realip判断只能替换一些能被js掌控的,一些资源是无法被替换的。而sw的劫持能力远远超过了前端劫持。
28#
发表于 2022-1-7 18:31:17 来自手机 | 只看该作者
为什么不通过一段代码,利用x-real-ip之类的得到的ip,套用api判断是国内还是国外,国内请求国内的,国外的请求jsdelivr
27#
发表于 2022-1-7 18:25:52 | 只看该作者
大佬你博客打不开了
26#
 楼主| 发表于 2022-1-7 18:02:37 | 只看该作者
sdqu 发表于 2022-1-7 17:50
没懂有什么用处
弄个hk cn2之类,然后根据请求ip 302到不同的地方不就可以了么 ...

1保持域名端口不变,只是在处理请求时移花接木,用户无感知,也确保了seo
2并行请求,请求同一个页面时会同时向所有镜像服务器发起请求,即使大部分服务器崩溃了也没关系。
3确保获得的资源来自最快的节点,而且服务器只承载很小的流量
25#
发表于 2022-1-7 17:50:24 | 只看该作者
没懂有什么用处
弄个hk cn2之类,然后根据请求ip 302到不同的地方不就可以了么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-1-15 20:56 , Processed in 0.062397 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表