V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
爱意满满的作品展示区。
iqoo

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

  •  3
     
  •   iqoo · Sep 13, 2021 · 4681 views
    This topic created in 1701 days ago, the information mentioned may be changed or developed.

    免费空间

    不少人为了节省网站流量费用,使用图床、相册作为免费 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 值,最大程度减少隐私泄露。

    19 replies    2021-09-22 16:58:37 +08:00
    iqoo
        1
    iqoo  
    OP
       Sep 13, 2021
    liuidetmks
        2
    liuidetmks  
       Sep 13, 2021
    把 js 编码成图片,如果图床压缩了,会有损失吗?
    mritd
        3
    mritd  
       Sep 13, 2021 via iPhone
    我擦 真的会玩
    yafoo
        4
    yafoo  
       Sep 13, 2021 via Android
    为了节省流量,真是拼了,以前也有各种节省流量的想法
    whileFalse
        5
    whileFalse  
       Sep 14, 2021 via iPhone
    有这技术多花点钱不行么
    i0error
        6
    i0error  
       Sep 14, 2021
    思路清奇......
    iqoo
        7
    iqoo  
    OP
       Sep 14, 2021
    @liuidetmks 无损压缩就没事。担心有损压缩的话可以多准备几个图片做冗余。
    lizhenda
        8
    lizhenda  
       Sep 14, 2021
    这样可以白嫖图床来当 CDN 用吗~
    ragnaroks
        9
    ragnaroks  
       Sep 14, 2021
    头条:早晚被你们薅死
    scyuns
        10
    scyuns  
       Sep 15, 2021
    还是你们会玩呀
    Clash
        11
    Clash  
       Sep 16, 2021
    会玩
    horizon
        12
    horizon  
       Sep 16, 2021
    厉害了
    Themyth
        13
    Themyth  
       Sep 16, 2021   ❤️ 1
    @whileFalse 这样才有意思啊!这样才有乐趣啊!谁在乎钱不钱的。。
    cweijan
        14
    cweijan  
       Sep 16, 2021
    好家伙, 白嫖 CDN 属于是
    pC0oc4EbCSsJUy4W
        15
    pC0oc4EbCSsJUy4W  
       Sep 16, 2021
    太牛逼了
    lumotian
        16
    lumotian  
       Sep 16, 2021
    这样是不是可以越过墙
    steveway
        17
    steveway  
       Sep 17, 2021
    真 tm 是个人才。。。
    iqoo
        18
    iqoo  
    OP
       Sep 18, 2021
    其实很多年前就试验过,不过当时用的免费空间是 IFPS,没有图片有趣~

    www.v2ex.com/t/413092
    pkwenda
        19
    pkwenda  
       Sep 22, 2021
    太有才了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1716 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 62ms · UTC 16:23 · PVG 00:23 · LAX 09:23 · JFK 12:23
    ♥ Do have faith in what you're doing.