diff --git a/3DTank/tools/wss_server.js b/3DTank/tools/wss_server.js index c6c3234..0c533d6 100644 --- a/3DTank/tools/wss_server.js +++ b/3DTank/tools/wss_server.js @@ -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(