mirror of
https://gitcode.com/JianFeeeee/ModelRouter.git
synced 2026-11-07 09:47:23 +00:00
fix(vnc): noVNC 的 path 必须用相对名,否则 WebSocket 路径重复拼接
真实缺陷(白屏真因之一):view_url 里传了**站点根路径**作为 noVNC 的 path 参数: .../proxy/<id>/vnc.html?path=api%2Fplugins%2Fhttp%2Fchannels%2Fbrowser%2Fproxy%2F<id>%2Fwebsockify 但 noVNC 用 `new URL(path, location.href)` 解析它(app/ui.js 的 connect()), 即**相对 vnc.html 所在目录**解析,默认值就是相对名 "websockify"。传根路径 会被当相对路径 ⇒ 实际请求变成路径重复拼接: .../proxy/<id>/api/plugins/http/channels/browser/proxy/<id>/websockify 于是 WebSocket 永远连不上,noVNC 显示连接失败,页面看似白屏。 修法:只传相对名 path=websockify,与 noVNC 默认值一致。 ★ 判据:必须解析**产品自己给出的 URL**(而不是测试里手拼)。我上一轮验证时 手拼 URL 并省掉了 path 参数(默认值恰好正确)⇒ 掩盖了这个真实缺陷。 新判据断言:path 存在、不以 / 开头、且 ResolveReference 后等于同级 websockify。
This commit is contained in:
@ -4277,8 +4277,14 @@ local function spawnBrowser(start_url)
|
||||
-- 客户端可能来自另一台机器(127.0.0.1 指向客户端自己)且 websockify 只绑回环,
|
||||
-- 所以只能由网关同端口转发;插件只提供回环目标与绝对路径,不处理传输。
|
||||
local base = "/api/plugins/http/channels/browser/proxy/" .. sess
|
||||
-- noVNC 用 `new URL(path, location.href)` 解析 path(ui.js 的 connect()),
|
||||
-- 即**相对 vnc.html 所在目录**解析,默认值就是相对名 'websockify'。
|
||||
-- 曾传站点根路径(/api/.../websockify)→ 被当相对路径 ⇒ 路径重复拼接:
|
||||
-- .../proxy/<id>/api/plugins/http/channels/browser/proxy/<id>/websockify
|
||||
-- 于是 WebSocket 永远连不上(noVNC 显示连接失败,页面看似白屏)。
|
||||
-- 只用相对名,与 noVNC 默认值一致。
|
||||
local proxyPath = base .. "/vnc.html?autoconnect=1&resize=scale&password=" .. pass
|
||||
.. "&path=" .. urlencode(base:sub(2) .. "/websockify")
|
||||
.. "&path=websockify"
|
||||
return {
|
||||
view_url = proxyPath,
|
||||
proxy_path = proxyPath,
|
||||
|
||||
Reference in New Issue
Block a user