怎样加速GitHub文件下载?

Share on:

怎样加速GitHub文件下载?

如果直连GitHub,最近怎么连图片都加载不出来了?下载速度20 kb/s ,玩蛇皮啊?怎样加速GitHub文件下载?Github Download Faster With Cloudflare Worker

遇到问题先Google,发现有修改hosts的方法,不过2020年,这个方法已经凉了吧?!没有测试

前端时间刷电报群,似乎有点印象,CDN加速下载,用CloudFlare的worker来实现。

首先,一个托管在CloudFlare上的域名,试用免费版本的Worker,建立一个xxx.xxx.work.dev的四级域名?

在script内粘贴以下内容:

Deploy然后打开网站即可。

每天上限10万次调用

 1addEventListener('fetch', event => {
 2    event.respondWith(handleRequest(event.request).catch((err) => { return new Response(err.message) }))
 3})
 4
 5const html = `
 6  <html><head><h1 style="font-size:32px;font-family:verdana;color:red;">Github直链加速下载每日10w次调用 </h1></head><body>
 7
 8  <input type="url" placeholder="url" id="url" style="border: 6px solid powderblue;color: blue; width: 60%; display: block;">
 9  <input
10  type="submit" id="submit" value="submit"
11  style="width: 30%; text-align: center;font-size: 18px;border: 1px solid powderblue;"/>
12  <div id="res"></div>
13  <a id="a" href="""></a>
14
15
16<p>
17<br>
18<br>
19<br>
20怎么自己搭建这个界面?
21<br>
22https://scaleya.com/publication/github-download-faster-with-cloudflare-worker/
23</p>
24
25  <script>
26  document.getElementById('submit').onclick=function(){
27      let url  = document.getElementById('url').value;
28      console.log('url: '+url);
29      let a = document.getElementById('a');
30      let div = document.getElementById('res');
31      if(!url || !url.startsWith('http')){
32          div.textContent="链接不合法: "+url;
33          a.style="display:none";
34      }else{
35          div.textContent="";
36          let res = (new URL(window.location.href)).origin+'?url='+encodeURIComponent(url);
37          a.textContent=res;
38          a.href=res;
39          a.style="";
40      }
41  }
42  </script>
43  </body></html>`;
44
45/**
46 * Respond to the request
47 * @param {Request} request
48 */
49async function handleRequest(request) {
50
51    if (request.method === 'OPTIONS' && request.headers.has('access-control-request-headers')) {
52        return new Response(null, {
53            status: 204,
54            headers: new Headers({
55                'access-control-allow-origin': '*',
56                'access-control-allow-methods': 'GET,POST,PUT,PATCH,TRACE,DELETE,HEAD,OPTIONS',
57                'access-control-allow-headers': '*',
58                'access-control-max-age': '1728000'
59            }),
60        })
61    }
62    let req_url = new URL(request.url);
63    if (req_url.pathname.startsWith('/ajax/')) {//ajax
64        let url = req_url.pathname.slice(6).replace(/^(https?):\/+/, '$1://');
65        if (!url) return new Response("Only For Ajax");
66        let res = await fetch(url, { method: request.method, headers: request.headers, body: request.body });
67        let h = new Headers(res.headers);
68        h.set('access-control-allow-origin', '*');
69        h.set('access-control-expose-headers', '*');
70        return new Response(res.body, { status: res.status, headers: h });
71    } else if (req_url.pathname === '/') {//download
72        let url = req_url.searchParams.get('url');
73        if (!url) return new Response(html, { status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
74        let res;
75        if (request.headers.get('Range')) {
76            res = await fetch(url, { headers: { 'Range': request.headers.get('Range') } });
77        } else {
78            res = await fetch(url);
79        }
80        let h = new Headers(res.headers);
81        h.set('set-cookie', '');
82        h.set('access-control-allow-origin', '*');
83        h.set('access-control-expose-headers', '*');
84        return new Response(res.body, {
85            status: res.status,
86            headers: h,
87        })
88    } else {
89        return new Response("400 --", { status: 400, headers: { 'Content-Type': 'text/html; charset=utf-8' } });
90    }
91}
92