• Stars
    star
    130
  • Rank 275,749 (Top 6 %)
  • Language
    JavaScript
  • Created almost 7 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

网站 CDN 去中心化尝试

网站 CDN 去中心化尝试

最新方案

查看:https://github.com/EtherDream/freecdn


演示

https://fanhtml5.github.io/

原理

将网站资源上传到外部站点,例如图床、相册、免费空间等(本案例使用 IPFS),并记录下原路径与新 URL。

网站前端通过 Service Worker 拦截所有资源加载,将原始路径代理到相应的外部 URL 上,这样就能大幅降低网站带宽消耗,并且能根据用户端上的实际网络情况,动态选择最优节点。

部署

网站只需部署 2 个文件,一个 html 用于 404 展示,另一个 js 用于 SW 脚本。

当用户首次访问时,请求站点任意路径(上述 JS 除外)就能触发 404 页面,通过该页面即可实现 SW 的安装。然后页面自动刷新,之后所有的流量都走 SW 了。

安全性

为了防止外部站点篡改资源内容,我们还得记录资源 Hash 值。但这面临一个问题:我们必须等整个资源下载完成,才能对数据进行校验,这将导致资源无法渐进展示。例如,大图片在加载过程中始终处于白屏,最后才一次性展示,而无法边加载边展示。

为此,这里使用分块 Hash。我们将资源数据分成若干块(B1, B2, ..., Bn),然后使用链式 Hash:

H1 = hash(B1 + H2)
H2 = hash(B2 + H3)
H3 = hash(B3 + H4)
...
Hn-1 = hash(Bn-1 + Hn)
Hn = hash(Bn)

然后将 B1, H2, B2, H3, B3, ..., Hn, Bn 合并成新文件。在资源目录里,只需记录 H1 即可。

这样就能做到边校验边展示的效果了。具体实现可参考 tool/pack.js

文件头

为了让文件更有通用性,我们将其打包成图片格式,使得可以在更多的站点上传。

出于演示,目前只在头部放置了一个 1x1 的 GIF 文件(这里称之 stub)。更好的方式,则是将数据放置于像素,以防网站修改文件信息。

更新中...

HTTP 206、错误重试、负载均衡、多线程加速、自动上传工具

参考:https://yq.aliyun.com/articles/236582

More Repositories

1

jsproxy

An online proxy based on ServiceWorker
Shell
9,309
star
2

web2img

Bundle web files into a single image
JavaScript
1,267
star
3

freecdn

A front-end CDN based on ServiceWorker
JavaScript
980
star
4

web-frontend-magic

#前端黑魔法# 整理
783
star
5

http-server-online

Start a local HTTP server without any tools, just open a web page.
JavaScript
629
star
6

jsproxy-browser

jsproxy 浏览器端程序
JavaScript
286
star
7

js-port-knocking

Web 端口敲门的奇思妙想
HTML
237
star
8

myppt

189
star
9

headphone-morse-transmitter

Send Morse code via ⏸️ ⏯️ ⏮️
HTML
177
star
10

QuickReader

An ultra-high performance stream reader for browser and Node.js
TypeScript
168
star
11

WebScrypt

a fast and lightweight scrypt hash algorithm for browser
JavaScript
152
star
12

https_hijack_demo

HTTPS Frontend Hijack
JavaScript
92
star
13

mitm-http-cache-poisoning

HTTP Cache Poisoning Demo
JavaScript
87
star
14

sw-sec

Service Worker 安全探索
HTML
73
star
15

str2gbk

JS 字符串转 GBK 编码超轻量实现
JavaScript
53
star
16

toh

TCP over HTTP. 隐藏网站的管理服务
JavaScript
43
star
17

cookie_hijack_demo

MITM cookie sniffer
JavaScript
35
star
18

timelock

A time-lock puzzle designed for browsers
TypeScript
27
star
19

freecdn-js

freecdn browser side files
TypeScript
26
star
20

xss_ghost

XSS 跨窗口劫持
JavaScript
20
star
21

proof-of-work-hashcash

Proof-of-Work Hashcash demo
JavaScript
17
star
22

gzip-js-injector

GZIP 页面零开销注入 JS 演示
JavaScript
14
star
23

6502-to-js-test

HTML
9
star
24

mini-program-pack

小程序静态资源打包和压缩
JavaScript
9
star
25

freecdn-publib

public lib database for freecdn
JavaScript
6
star
26

freecdn-update-svc

TypeScript
6
star
27

test

just test
JavaScript
4
star
28

jsproxy-bin

3
star
29

js-anti-ddos

使用浏览器端 JS 防御 DDOS 攻击
3
star
30

jsproxy-localtest

HTML
3
star
31

etherdream.github.io

2
star
32

setupsw

2
star
33

parallel-pbkdf2

The best password hashing solution in browser
HTML
2
star
34

cloudshellproxy

1
star
35

free-host-test

JavaScript
1
star
36

webworker.swc

HTML5-style Worker For Flash
ActionScript
1
star