READMESource: main@bb16b8c2
dsh-origin-alias
把「本机地址」统一成 http://127.0.0.1:3080 的 DSH 插件。适合 Docker / 反向代理 部署(例如宿主用 http://192.168.1.10:3084/ 访问),因为不少插件默认假设 DSH 就跑在 127.0.0.1:3080。
它做了什么
| 层 | 行为 |
|---|---|
| A. 服务端请求头归一 | 进入 DSH 的每个 HTTP 请求 / WebSocket 升级请求:Host → 127.0.0.1:3080,Origin → http://127.0.0.1:3080,Referer 的 origin 也归一。插件里任何 req.headers 校验看到的都是本机 3080。 |
| B. 浏览器绝对地址重写 | fetch / XMLHttpRequest / WebSocket / EventSource / navigator.sendBeacon:发往 http://127.0.0.1:3080、http://localhost:3080、http://127.0.0.1:3079 等别名的绝对地址,发出前改写成当前访问地址。相对地址(/api/...)不动。 |
| C. 地址宣告 | webApp.getAdvertisedUrl() 返回 http://127.0.0.1:3080,于是 DSH_WEB_URL、shell 环境、宿主生成的链接都用 3080。 |
安全边界没有放宽:Host 与 Origin 依旧同源且是回环,sec-fetch-site: cross-site 的请求仍会被 DSH 的 API 网关拒绝。
配置
见 cordis.patch.yml。常用项:
canonicalOrigin:本机地址,默认http://127.0.0.1:3080advertiseOrigin:对外宣告地址,置空字符串则不接管aliasOrigins:浏览器端会被重写回去的地址前缀rewriteHost/rewriteOrigin/rewriteReferer:服务端改写开关bypassHeader:请求带上该头(值任意)可跳过改写,便于排查
验证
在浏览器里打开(按你的实际访问地址):
http://192.168.1.10:3084/__origin-alias__/status
应返回 ok: true、canonicalOrigin: "http://127.0.0.1:3080",以及 stats 里累计的改写次数。
浏览器控制台里:
__DSH_ORIGIN_ALIAS_RUNTIME__.stats // fetch / xhr / websocket 等被重写的次数
__DSH_ORIGIN_ALIAS_RUNTIME__.rewrite('http://127.0.0.1:3080/api/bili-duty/status')
// => 'http://192.168.1.10:3084/api/bili-duty/status'
注意
- 服务端改写依赖
webServer服务;端口是异步 listen 的,插件会自动等 server 就绪再挂钩子。 - 如果你的 DSH 不是经反代访问(127.0.0.1:3079 之外没有网关),把
canonicalOrigin改成实际地址即可。 - 卸载:
plugin_manager里移除本包,或删掉 bundle 记录后重启。
No comments yet. Be the first to write one.