mirror of
https://gitcode.com/JianFeeeee/HomeAgent.git
synced 2026-09-26 12:23:23 +00:00
用户点「星图」看到「3D 星图不可用(CDN 加载失败)」。 服务端 curl 那两个 URL 都是 **200** ⇒ 不是服务端的问题,是**浏览器** 访问不到公网 CDN(内网 / 出口受限 / 断网)。dashboard.html 从 cdnjs 与 jsdelivr 拉 4 个库:three.js、OrbitControls、marked、DOMPurify。 换 CDN 只是把同一个赌注重下遍。HomeAgent 明确支持离线与内网部署, 前端却有 4 个硬依赖在公网上 ⇒ 断网即坏,且用户无从修复。 顺带两个收益: - **安全**:DOMPurify 是净化 Markdown 的关键一环,它挂掉前端会退化到 「不净化」分支(dashboard.js 里有 typeof 检查)—— 那是安全降级, 比星图坏更值得修。 - **体积**:四个库共 ~700KB,embed 后由本服务同源提供,省掉 4 个跨域握手, 也不再受第三方可用性影响。二进制 84MB → 84.7MB(+0.8%)。 - `internal/plugins/webui/static/` 放四个库(固定版本,随二进制走) - `//go:embed static` + 新增 `/static/` 路由 - dashboard.html 的四个 src 改指 `/static/...` - 加载失败兜底 8s → 3s(本地是毫秒级;仍超时就说明真有问题) `/static/` **不走 requireWeb**:未登录时页面也要加载这些库才能渲染登录框, 加认证会让用户看到白屏(比 401 更难自查)。这些资源不含用户数据。 - TestDashboardHasNoExternalCDN:页面不得引用任何公网 CDN - TestStarmapDependenciesAreLocal:星图两个库必须来自本地 - TestVendorFilesExistInSourceTree:vendor 文件必须在(embed 的前提) - TestStaticVendorRoutesServeRealLibraries:路由**必须真的返回库内容** ★ 最后一条的判据强度是补出来的:初版只判状态码,变异「返回 200 + 空体」 时**仍然绿** —— 而空体在浏览器里的症状与 404 完全一样(都报加载失败)。 改为同时判体积与特征串(REVISION / OrbitControls / marked / DOMPurify) 后,变异「只写前 10 字节」判红。 变异验证 3 条:HTML 改回 CDN → 2 条判红;路由挂回 requireWeb → 503 判红; 截断响应体 → 体积判红。 全量 38 包全绿。