免费 CDN —— 将整个网站打包成一张图片

2021-09-13 16:16:30 +08:00
 iqoo

免费空间

不少人为了节省网站流量费用,使用图床、相册作为免费 CDN 。但这只适用于图片资源,其他例如 JS/CSS/HTML 文件显然无法使用。

那么有没有什么办法,让任意文件都能通过图床加速?

编码解码

其实很简单,将文件编码成图片像素即可,运行时再通过 JS 进行解码。

但这么做是否需要修改网站资源的加载方式?其实不需要。我们可通过 Service Worker 拦截网页所有 HTTP 请求,然后使用资源包中的文件进行响应,这样无需任何修改即可使用。

安装过程

既然要调用 Service Worker,那么是否得在网页中加入额外的脚本?其实不需要。我们可使用这样一个机制 —— 用户访问任意路径,后端都返回 Service Worker 安装页;安装完成后页面自动刷新,之后的请求即可被 Service Worker 拦截,然后从资源包中提取文件。

实现也很简单,网站最终只需发布 404.html 和 sw js 即可 —— 前者用于 Service Worker 安装,后者用于 Service Worker 脚本。这样用户访问任意路径,即可先安装 Service Worker,自动刷新后出现原始内容,例如:

fanhtml5.github.io/

首次访问时页面会自动刷新,然后出现原始文件。

该站点原始文件有多个文件,总共数 MB ( github.com/fanhtml5/test-site

但最终发布的文件只有两个,压缩后不到 2kB ( github.com/fanhtml5/fanhtml5.github.io

安全稳定

为了提高稳定性,可使用多个站点的图片,如果加载失败或超时则使用下一个;为了提高安全性,可对数据进行 Hash 校验,不正确则使用下一个。

为了防止泄露 Referrer 以及绕过外链限制,我们可使用 referrer-policy 对 Referer 进行隐藏。

为了防止 Origin 请求头泄露站点域名,我们可通过 Data URI 创建的 iframe 加载图片,这样该请求头就变成了 null 值,最大程度减少隐私泄露。

3941 次点击
所在节点    分享创造
19 条回复
iqoo
2021-09-13 16:23:06 +08:00
liuidetmks
2021-09-13 20:31:10 +08:00
把 js 编码成图片,如果图床压缩了,会有损失吗?
mritd
2021-09-13 22:17:38 +08:00
我擦 真的会玩
yafoo
2021-09-13 23:15:53 +08:00
为了节省流量,真是拼了,以前也有各种节省流量的想法
whileFalse
2021-09-14 08:07:32 +08:00
有这技术多花点钱不行么
i0error
2021-09-14 09:28:36 +08:00
思路清奇......
iqoo
2021-09-14 10:41:49 +08:00
@liuidetmks 无损压缩就没事。担心有损压缩的话可以多准备几个图片做冗余。
lizhenda
2021-09-14 12:34:23 +08:00
这样可以白嫖图床来当 CDN 用吗~
ragnaroks
2021-09-14 12:45:09 +08:00
头条:早晚被你们薅死
scyuns
2021-09-15 11:36:00 +08:00
还是你们会玩呀
Clash
2021-09-16 11:17:36 +08:00
会玩
horizon
2021-09-16 11:35:10 +08:00
厉害了
Themyth
2021-09-16 14:07:36 +08:00
@whileFalse 这样才有意思啊!这样才有乐趣啊!谁在乎钱不钱的。。
cweijan
2021-09-16 14:07:37 +08:00
好家伙, 白嫖 CDN 属于是
fatelight
2021-09-16 14:41:31 +08:00
太牛逼了
lumotian
2021-09-16 16:47:29 +08:00
这样是不是可以越过墙
steveway
2021-09-17 09:27:46 +08:00
真 tm 是个人才。。。
iqoo
2021-09-18 00:21:44 +08:00
其实很多年前就试验过,不过当时用的免费空间是 IFPS,没有图片有趣~

www.v2ex.com/t/413092
pkwenda
2021-09-22 16:58:37 +08:00
太有才了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/801570

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX