fix(relay): 上游握手不再发送 Referer(对齐浏览器真实握手)

- 依据:官方 Copy-as-cURL 的握手头里没有 Referer —— 浏览器发起的 WebSocket 握手本身不带它

- 实测:用原版头直连 wss://c1.3dtank.com:9090/ 可保持连接(8s 超时退出);而中继因多带 Referer 被上游 code=1000 关闭(短命连接)

- 仅删 Referer;Origin 仍强制覆盖为 https://3dtank.com(本机 origin 会被上游拒)
This commit is contained in:
TermiNexus committed 2026-10-15 16:27:34 +08:00
1 parent 1b487fbdd6
commit ab4c31311c
1 file changed
+4 -2
+4 -2
View File
@@ -537,10 +537,12 @@ WsServer.on('connection', (Client, Req) => {
UpHeaders[L] = Req.headers[K];
}
if (!UpHeaders['user-agent']) UpHeaders['user-agent'] = UPSTREAM_HEADERS['user-agent'];
// Origin/Referer **强制用真实站点的值**:前端(浏览器)带的是本机地址 http://localhost:8080,
// Origin **强制用真实站点的值**:前端(浏览器)带的是本机地址 http://localhost:8080,
// 真实服务器会据此校验来源,必须覆盖,不能透传。
UpHeaders['origin'] = UPSTREAM_HEADERS.origin;
UpHeaders['referer'] = UPSTREAM_HEADERS.referer;
// Referer:**不要加**。浏览器发起的 WebSocket 握手本身不带 Referer(见官方 Copy-as-cURL 的握手头),
// 带上它会让上游把连接识别为「非浏览器来源」——实测疑似导致「复用哈希的二次连接」被 code=1000 关闭。
delete UpHeaders['referer'];
// 诊断:打印**发往上游**的真实握手来源(注意与上面「来源: … Origin: …」那行区分开 ——
// DevTools 里看到的本机 Origin 是「浏览器→中继」这一段,页面 JS 改不了;中继改的是「中继→上游」这一段)
State.Log(