|
|
@@ -1,28 +1,30 @@
|
|
|
/**
|
|
|
* WebSocket 基础地址
|
|
|
- * - 优先使用 .env 中的 VITE_WS_BASE(若为 https 页面且配的是 ws://,会自动改为 wss + 当前 host)
|
|
|
- * - 若当前页面为 HTTPS,强制使用 wss + 当前 host(走 Nginx 443),避免混合内容被拦截
|
|
|
- * - 若页面是 HTTP 且访问 IP/与 VITE_WS_BASE 中 wss 域名不一致,改用 ws://当前主机:8000(避免在 http://IP 下仍连 wss://其它域导致握手失败)
|
|
|
+ * - HTTPS:wss://当前页面 host/alienStore/socket(不写死域名/IP,UAT/生产/测试域名通用)
|
|
|
+ * - HTTP:优先 VITE_WS_BASE;若 env 为异名 wss 则回退 ws://当前 hostname + VITE_WS_DIRECT_PORT(默认 8000)直连 store
|
|
|
+ * - 不配 env 的 HTTP:同上,用当前 hostname,避免写死某台 SIT IP
|
|
|
*/
|
|
|
export function getWebSocketBase(): string {
|
|
|
const envBase = (import.meta.env.VITE_WS_BASE as string | undefined)?.trim();
|
|
|
+ const directPort = String(import.meta.env.VITE_WS_DIRECT_PORT || "8000").replace(/^:/, "");
|
|
|
+
|
|
|
+ const httpDirectWs = (hostname: string) => `ws://${hostname}:${directPort}/alienStore/socket`;
|
|
|
+
|
|
|
if (typeof window !== "undefined" && window.location) {
|
|
|
const isHttps = window.location.protocol === "https:";
|
|
|
- const host = window.location.host; // hostname + port(如 120.26.186.130 或 uat.ailien.shop)
|
|
|
- // 页面是 HTTPS 时,必须用 wss,且用当前 host(不写死端口),由 Nginx 443 代理到后端
|
|
|
+ const host = window.location.host; // hostname + port(如 uat.ailien.shop)
|
|
|
if (isHttps) {
|
|
|
return `wss://${host}/alienStore/socket`;
|
|
|
}
|
|
|
+ const locHost = window.location.hostname;
|
|
|
if (envBase && envBase.trim()) {
|
|
|
const e = envBase.replace(/\/$/, "");
|
|
|
- const locHost = window.location.hostname;
|
|
|
const isLocal = locHost === "localhost" || locHost === "127.0.0.1";
|
|
|
- // 例如:浏览器打开 http://120.26.186.130/... 但 .env 写死 wss://test.ailien.shop → 跨域 wss 常失败;同机 store 多监听 8000
|
|
|
- if (!isHttps && e.startsWith("wss://") && !isLocal) {
|
|
|
+ if (e.startsWith("wss://") && !isLocal) {
|
|
|
try {
|
|
|
const envHost = new URL(e.replace(/^wss:/, "https:")).hostname;
|
|
|
if (envHost !== locHost) {
|
|
|
- return `ws://${locHost}:8000/alienStore/socket`;
|
|
|
+ return httpDirectWs(locHost);
|
|
|
}
|
|
|
} catch (_) {
|
|
|
/* ignore */
|
|
|
@@ -30,10 +32,10 @@ export function getWebSocketBase(): string {
|
|
|
}
|
|
|
return e;
|
|
|
}
|
|
|
- return "ws://120.26.186.130:8000/alienStore/socket";
|
|
|
+ return httpDirectWs(locHost);
|
|
|
}
|
|
|
if (envBase) {
|
|
|
return envBase.replace(/\/$/, "");
|
|
|
}
|
|
|
- return "ws://120.26.186.130:8000/alienStore/socket";
|
|
|
+ return `ws://127.0.0.1:${directPort}/alienStore/socket`;
|
|
|
}
|