crypto.randomUUID is not a function?DeepSeek Harness 网页打不开排查
DeepSeek Harness 网页报 crypto.randomUUID is not a function、换好几个浏览器都没用——根因不是浏览器,而是访问方式:crypto.randomUUID() 只在安全上下文里存在(https://,或 http://localhost / http://127.0.0.1),用 IP 地址走明文 HTTP 访问(如 http://192.168.1.50:3080)不算安全上下文,该页面里 crypto.randomUUID 就是 undefined。 按 F12 敲 window.isSecureContext 十秒定案,SSH 端口转发、本机访问、配 HTTPS 三选一解决。
crypto.randomUUID is not a function 长什么样
报错固定为 crypto.randomUUID is not a function,发生在打开 DSH 的 web 界面时,且与浏览器版本、Linux 发行版无关。 报告者实跑遇到(讨论原文):
- 环境:Linux 9,安装后打开 web 界面直接报错;
- 报告者切换了好几种浏览器,全部一样报错——这是符合预期的,因为问题不在浏览器;
- 报错点名的
crypto.randomUUID是一个生成 UUID 的 Web API,页面一旦拿不到它,渲染流程就直接断掉。
根因:crypto.randomUUID 只在安全上下文里存在
浏览器对安全上下文的定义只有两种:https://,或者 http://localhost / http://127.0.0.1。用 IP 地址走明文 HTTP(http://192.168.1.50:3080 这类)不算安全上下文,crypto.randomUUID 在那种页面里就是 undefined(来源,MDN 安全上下文定义)。
这跟浏览器版本无关、跟 Linux 发行版无关,所以「换浏览器解决不了」是必然结果。crypto.randomUUID 是仅限安全上下文的 Web API,浏览器只给满足条件的页面暴露它。
10 秒确认:window.isSecureContext
在出问题的页面按 F12 打开控制台,敲 window.isSecureContext,按返回值分支:
- 返回
false→ 就是这个原因,按下面三条解法任选一条; - 返回
true→ 不是这个原因,那更可能是 Node 版本太老(globalThis.crypto是 Node 19 才默认全局可用),把node -v的输出贴出来确认。
这一条命令能在 10 秒内给出确定答案,不用瞎猜。
三种解法:从省事到正规
核心思路是把页面变成安全上下文:让浏览器看到的是 localhost/127.0.0.1,或者给页面配 HTTPS。 按顺序选:
- SSH 端口转发(最省事,不用改任何配置):在你自己的电脑上执行
ssh -L 3080:127.0.0.1:3080 你的用户名@服务器地址
然后本机浏览器访问 http://localhost:3080——浏览器看到的是 localhost,安全上下文成立,问题直接消失。这也是社区里跑无头服务器的人常用的姿势,不是将就的办法;
- 在服务器本机上访问
http://127.0.0.1:3080(如果那台机器有桌面环境的话); - 配 HTTPS(长期正规做法):前面挂一个 Nginx / Caddy 反代,用自签名或 Let's Encrypt 证书。Caddy 配一行就行,之后任何机器都能通过
https://访问。
注意事项
- 别在换浏览器上浪费时间——问题在访问协议,不在浏览器。
- 局域网内其它机器要访问时,优先走第 1 条(各自 SSH 转发)或第 3 条(统一 HTTPS),不要继续用 IP 明文 HTTP。
- 若
window.isSecureContext返回true仍报错,检查 Node 版本(≥19 才有默认全局crypto)与 dsh 版本。 - 同类网页异常还汇总在《DeepSeek Harness 插件报错合集:DSH plugin 不加载、Web UI 异常与会话缓存修复》里。
常见问题
crypto.randomUUID() 只在安全上下文里存在:https://,或 http://localhost / http://127.0.0.1。用 IP 地址走明文 HTTP 访问(如 http://192.168.1.50:3080)不算安全上下文,该页面里 crypto.randomUUID 就是 undefined(来源)。
因为这不是浏览器问题,是访问方式问题:任何浏览器在非安全上下文页面里都没有 crypto.randomUUID。换浏览器当然无效,这是符合预期的。
在出问题的页面按 F12 打开控制台,敲 window.isSecureContext:返回 false 就是安全上下文问题,按三条解法任选;返回 true 则更可能是 Node 版本太老(globalThis.crypto 是 Node 19 才默认全局可用),把 node -v 输出贴出来确认。
三选一:SSH 端口转发最省事(ssh -L 3080:127.0.0.1:3080 用户名@服务器地址,本机访问 http://localhost:3080);服务器本机直接访问 http://127.0.0.1:3080;长期正规做法是前面挂 Nginx/Caddy 反代配 HTTPS。
无关。这是 Web 平台的安全上下文规则:浏览器只给 https 或 localhost/127.0.0.1 页面提供 crypto.randomUUID。DSH 的 web 服务是它自家组件,装什么插件、换什么发行版都不改变这个规则。
来源
- deepseek-harness Discussion #4653:linux 安装后打开 web 界面报 crypto.randomUUID is not a function· deepseek-ai(GitHub Discussions)
- MDN:安全上下文(Secure contexts)定义· Mozilla MDN
- MDN:Crypto.randomUUID() 兼容性(Secure context 限定)· Mozilla MDN