怎样加速GitHub文件下载?
怎样加速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