docmirror / dev-sidecar

开发者边车,github打不开,github加速,git clone加速,git release下载加速,stackoverflow加速
Mozilla Public License 2.0
14.41k stars 1.72k forks source link

feature: 在 `script` 拦截器配置相对地址和绝对地址时,自动生成一些相关的辅助拦截配置,避免相对地址和绝对地址引起的跨域问题和脚本 `content-type` 限制问题。 #298

Closed wangliang181230 closed 2 months ago

wangliang181230 commented 2 months ago

Ⅰ. 描述此PR的作用:

feature: 在 script 拦截器配置相对地址和绝对地址时,自动生成一些相关的辅助拦截配置,解决以下问题:

  1. 避免跨域问题
  2. 避免脚本 content-type 限制问题
  3. 避免绝对地址在接收代理请求时,由于请求头包含了源站点的一些信息而被拦截或重定向

Ⅱ. 原理说明:

1. 当使用script配置绝对地址时,将会生成相对的伪脚本地址,并为该伪脚本地址生成代理配置,如下:

原配置:

{
  "github.com": {
    "^(/[^/.]{1,30}){2}([/?].*)?$": {
      "script": [
        "https://raw.githubusercontent.com/docmirror/dev-sidecar/scripts/github/monkey.js"
      ],
      "desc": "加载DS仓库中的Github油猴脚本,加速clone和文件下载等。"
    }
  }
}

自动替换为:

{
  "github.com": {
    "^(/[^/.]{1,30}){2}([/?].*)?$": {
      "script": [
        // 绝对地址替换为相对地址,避免跨域问题
        "/____ds_script_proxy____/https_raw_githubusercontent_com_docmirror_dev_sidecar_scripts_github_monkey.js"
      ],
      "desc": "加载DS仓库中的Github油猴脚本,加速clone和文件下载等。"
    },
    "^/____ds_script_proxy____/https_raw_githubusercontent_com_docmirror_dev_sidecar_scripts_github_monkey\\.js$": {
      "proxy": "https://raw.githubusercontent.com/docmirror/dev-sidecar/scripts/github/monkey.js",
      "requestReplace": {
        "headers": {
          "host": "[remove]",
          "referer": "[remove]",
          "cookie": "[remove]"
        }
      },
      "responseReplace": {
        "headers": {
          "content-type": "application/javascript; charset=utf-8",
          "set-cookie": "[remove]",
          "server": "[remove]"
        }
      },
      "cacheDays": 7,
      "desc": "为伪脚本文件设置代理地址,并设置响应头 `content-type: 'application/javascript; charset=utf-8'`,同时缓存7天。"
    }
  }
}

2. 当使用script配置相对地址时,将会生成响应头替换配置,如下:

原配置:

{
  "github.com": {
    "^(/[^/.]{1,30}){2}([/?].*)?$": {
      "script": [
        "/docmirror/dev-sidecar/raw/scripts/github/monkey.js"
      ],
      "desc": "加载DS仓库中的Github油猴脚本,加速clone和文件下载等。"
    }
  }
}

自动增加响应头替换配置:

{
  "github.com": {
    "^(/[^/.]{1,30}){2}([/?].*)?$": {
      "script": [
        "/docmirror/dev-sidecar/raw/scripts/github/monkey.js" // 相对地址不变
      ],
      "desc": "加载DS仓库中的Github油猴脚本,加速clone和文件下载等。"
    },
    "/docmirror/dev-sidecar/raw/scripts/github/monkey.js": {
      "responseReplace": {
        "headers": {
          "content-type": "application/javascript; charset=utf-8"
        }
      },
      "cacheDays": 7,
      "desc": "为脚本设置响应头 `content-type: 'application/javascript; charset=utf-8'`,同时缓存7天。"
    }
  }
}

Ⅲ. 此PR解决了什么问题?

降低了新特性 #294 配置复杂性。