DSH Desktop 431 启动故障排查
DeepSeek Harness Desktop 431:随机端口 Cookie 累积
- 作者
- DeepSeekAgent.io 编辑部
- 发布
- 更新
DeepSeek Harness Desktop v0.2.1-rc.3 的一个 Windows 社区案例出现了非常稳定的启动崩溃:点击应用后没有窗口,主进程日志停在 desktop welcome: Web authentication failed,重启和重装都无法恢复。进一步检查发现,真正的 HTTP 状态是 431——请求头过大。
问题由 Desktop 的随机 GUI 端口、按 authority 生成的认证 Cookie 名称和三天有效期共同形成。每次 Host 端口改变,Electron Cookie Jar 都保留一枚新的 dsh-auth-* Cookie;旧 Cookie 不会被同名覆盖。积累到接近 Node.js 请求头上限后,带完整 Cookie Jar 的 Desktop Welcome 请求被拒绝,主进程随即退出。
为什么网页认证成功,Desktop 仍然失败
启动认证包含两个不同客户端:
- 浏览器完成 Web 端身份认证;
- Desktop 通过 Electron 网络栈携带自己的 Cookie Jar 连接本地 Host。
第一段请求没有携带 Electron 内保存的全部历史 Cookie,所以网页可以正常显示认证成功。第二段请求会为 127.0.0.1 带上符合路径和域规则的 Cookie;这些 Cookie 的名称虽然编码了不同端口,Cookie 作用域却按主机匹配。最终所有旧端口留下的认证数据被一起送往当前随机端口。
这就造成了看似矛盾的现象:账号、验证码和网页认证都正常,Desktop 仍在 Welcome 阶段报告认证失败。错误文字描述了失败位置,没有呈现底层的 431 原因。
71 枚 Cookie 如何越过 16 KiB
社区复现指出,认证 Cookie 名由 127.0.0.1:<port> 的哈希生成,每枚约 227 字节,并设置三天 Max-Age。频繁重启 Host、安装或卸载插件会产生新的随机 GUI 端口,旧 Cookie 在有效期内持续累积。
案例中共有 71 枚相关 Cookie,粗略体积达到 16.1 KiB,已经逼近 Node 默认 16,384 字节的请求头限制。实际请求还包括 Cookie 分隔符和其他 Header,因此服务端返回 HTTP 431。此后每次启动都复用同一 Cookie Jar,故障便从偶发积累变成稳定崩溃。
重新安装应用通常不会清除用户数据目录中的 Electron Network Cookies;单纯重启也只会再尝试同一请求。这解释了为什么两种常见恢复动作都无效。
如何确认是同一条故障链
排查时可以核对以下信号:
- Desktop 版本为 rc.3,且近期频繁重启 Host 或操作插件;
- 主进程日志稳定停在
desktop welcome: Web authentication failed; - Web 端认证可以完成,随后 Desktop 立即退出;
- 本地 Host 返回 431,或请求
CookieHeader 已接近 16 KiB; - Electron Cookie 存储中存在大量面向
127.0.0.1的dsh-auth-*项。
若没有 431 或 Cookie 体积证据,仍应检查系统时间、代理、账户状态和连接错误,不能把所有 Welcome 失败都归到这一案例。
恢复动作要精确限定范围
社区报告通过在应用完全退出后清理匹配 host_key='127.0.0.1' 且名称为 dsh-auth-* 的 71 条 Cookie 恢复启动。这个结果验证了根因,但用户不应在应用运行时直接编辑 SQLite 数据库,也不应删除整个 Desktop 数据目录。
安全顺序是:
- 完全退出 DSH Desktop,确认相关进程已结束;
- 备份 Desktop 的 Network/Cookies 数据库;
- 优先使用产品提供的登录状态重置或 Cookie 清理入口;
- 只有在明确确认 431 与目标 Cookie 后,才处理限定的
127.0.0.1、dsh-auth-*记录; - 重启后重新认证,并检查 Session、Profile 和 Workspace 是否仍在;
- 保留日志与 Cookie 数量,便于向上游提交可复现信息。
直接清空整个用户数据目录会连带影响其他状态,扩大恢复成本。
产品如何避免再次积累
修复可以从生命周期和认证设计两端推进:
- 新端口启动成功后,删除同一主机的旧端口认证 Cookie;
- 缩短本地一次性 Cookie 的有效期,并限制保留数量;
- 将端口放入 Cookie 值或服务端会话映射,避免每个端口生成新名称;
- 启动前测量 Cookie Header,接近上限时主动清理并展示原因;
- 把 HTTP 431 映射为“本地认证 Cookie 过多”,不要只显示 Web authentication failed;
- 对随机端口重启、插件反复启停和跨版本升级编写压力测试。
对普通用户而言,这也是一个可辨认的边界:Web 登录成功只能证明浏览器认证完成,Desktop 仍有独立的本地连接和 Cookie 状态。将两段链路分别记录,才能快速定位启动故障。
参考资料
- Desktop rc.3 随机端口 Cookie 累积与 HTTP 431 社区复现
- DeepSeek Harness v0.2.1-rc.3 Release
- Node.js HTTP
--max-http-header-size文档
常见问题
重装 Desktop 为什么没有恢复?
应用安装目录和 Electron 用户数据目录是两套状态。重装可能保留 Network Cookie 数据库,过大的请求头仍会在下一次启动时出现。
网页已经显示登录成功,为什么还会提示认证失败?
网页认证与 Desktop Welcome 使用不同的网络客户端。后者携带 Electron Cookie Jar,可能因历史 Cookie 过多收到 431。
可以直接删除整个 Cookies 文件吗?
先备份,并优先采用产品提供的重置入口。若必须处理数据库,应只针对已经确认的本地 DSH 认证记录,避免扩大影响范围。