嘟嘟社区

workers 反代 jsdeliver


本帖最后由 jarmoku 于 2022-5-22 12:07 编辑

代码如下,具有防跨站和网址加密功能。你问我用这个有什么意义,主要是可以套国内的CDN呀!
具体使用使用方式参阅我的个人博客:https://www.430074.xyz/posts/workers-jsdeliver.html

  1. // 允许的 CORS 来源
  2. const ALLOWED_REFERER = [
  3.   /^https?://localhost(:d*)?/.*$/,
  4.   /^https?://([w-]+.)*w3schools.com(:d*)?/.*$/
  5. ];
  6. // 是否允许所有无 Referer 请求
  7. const ALLOW_NO_ORIGIN = true;
  8. //输入你的密码,密码加在path后面做SHA-1运算
  9. const MYSECRET = "123456";
  10. function validateReferer(req) {
  11.   const referer = req.headers.get(‘Referer’);
  12.   if (referer) {
  13.     for (const el of ALLOWED_REFERER) {
  14.       if (el.exec(referer)) {
  15.         return true;
  16.       }
  17.     }
  18.     return false;
  19.   }
  20.   return ALLOW_NO_ORIGIN; // 是否拒绝所有无 Referer 请求
  21. }
  22. async function handle(request) {
  23.   let url = new URL(request.url);
  24.   const acceptType = request.headers.get(‘Accept’);
  25.   const hash_request = url.pathname.split("/")[1];
  26.   const path_real = url.pathname.substring(hash_request.length + 1, url.pathname.length);
  27.   url.hostname = "cdn.jsdelivr.net";
  28.   url.pathname = path_real;
  29.   if (!(await validatePath(hash_request, path_real))) {
  30.     return new Response(‘Error Hash’, {
  31.       status: 403
  32.     });
  33.   }
  34.   if (!(validateReferer(request))) {
  35.     return new Response(‘Blocked Host’, {
  36.       status: 403
  37.     });
  38.   }
  39.   return await fetch(url);
  40. }
  41. async function validatePath(hash_request, path_real) {
  42.   const message = new TextEncoder().encode(path_real + MYSECRET);
  43.   const myDigest = await crypto.subtle.digest(‘SHA-1’, message);
  44.   const hashArray = Array.from(new Uint8Array(myDigest));
  45.   const hashHex = hashArray.map(b => b.toString(16).padStart(2, ‘0’)).join(”);
  46.   return (hashHex == hash_request);
  47. }
  48. addEventListener(‘fetch’, event => {
  49.   event.respondWith(handle(event.request));
  50. })

复制代码

gcore.jsdelivr.net
cf.jsdelivr.net
fastly.jsdelivr.net
好了楼主退下吧
有没有国内cdn的呢?速度要快哦。
马克