Repository navigation
Replies: 4 comments
|
遇到了同样的问题,清除cookies以后才正常打开。 |
补一组「直接验证边界」的数据(Windows 端独立复现,与你的结论一致)同一台机器今天(2026-10-24)踩到完全相同的故障,独立定位到同一个根因,数字和你几乎一致,可以作为交叉验证。 环境:Windows 11 x64 · 崩溃日志与你逐行一致: 4 分钟内连崩 6 次, 增量:不是推算,是把阈值两边都实测出来了你(以及 #10828)的 16 KB 结论是算出来的。我这边把它做成了对照实验:单独起同一个 Host(
两个结论:
这也解释了为什么只有 反向验证
复发每启动一次 +1 条、 修法补充(在你的四条之外加一条)你列的四条我都同意,优先第 1 条(启动时只保留本次 token 的 cookie)。再补一条成本几乎为零的:
相关
|
|
同一问题在 Linux 桌面构建上同样复现(同一 tag v0.2.1-rc.2 + 本地打包补丁), 一点补充: 最小修法仍是:签发时清掉其它 |
|
补充:精确崩溃阈值是 65 条(不是“约 70”),另外确认 rc.3 未修
dsh-auth-* 条数 这个数字比“约 70”更有用:它意味着只要超过 64 条就该清理了,等到 70 条才开始出问题已经晚了。按 @Light-EI 报的日均 14 次启动,约 4.5 天就会撞线,不是 5 天。
const COOKIE_PREFIX = "dsh-auth-"; 所以第 1 条修法(启动时只保留本次 token)确实是成本最低且唯一干净的。我更倾向第 2 条(secret 持久化):代码里已经有 AUTH_RECORD_KEY = credentialKey("client-connection", "browser-session") 这个持久化凭据位,把 secret 存进去,cookie 名就恒定了,天然覆盖、永不堆积 —— 而且顺带解决了“重启后旧 cookie 变垃圾”的问题。
我在 DSH 运行中试了四种只读方式,全部失败: plain open() PermissionError: [Errno 13] Permission denied 另外提醒做注入实验的人:条数不要设太高。我把条数推到 120 以上时,Host 直接在 TCP 层 ConnectionResetError (WinError 10054) 掐连接,连 431 都不返回了 —— 如果只看 HTTP 状态码,会误判成“没复现”。
体检:python clean_dsh_cookies.py --check(需先关 DSH) 最后一条建议(对上游) desktop welcome: request header too large (HTTP 431) — |
Uh oh!
There was an error while loading. Please reload this page.
环境:DSH Desktop 0.2.1-rc.2 · Windows 11(build 26200)· Node v24.15.0 · 未启用任何第三方插件时同样复现
现象
某次启动弹出:
对话框里的「Restart」和「Disable third-party plugins, back up profile patch, and restart」都无效。
崩溃日志(
%APPDATA%\@deepseek-ai\dsh-desktop\logs\crash-2026-10-22T05-23-08-752Z-host.log):对应源码:
任何非 2xx 都会走到这一句——包括 431。
根因
桌面端认证 token 每个进程启动随机生成一枚:
于是:
dsh-auth-<base64url>;%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies(SQLite);累积到约 70 枚时:单枚
name+value≈ 225 B → Cookie 头 ≈ 16.1 KB;加上Host/User-Agent/sec-fetch-*等约 1 KB,总请求头越过 Node 默认maxHeaderSize = 16384,host 返回 431,主进程看到非 2xx → 抛Web authentication failed。实测数据(本机)
dsh-auth-*条数name+value合计崩溃发生在第 71 枚出现后的第一次启动。
为什么难自查
报错文案是「Web authentication failed」,看起来像账号/凭据问题。实际上:
复现步骤
select count(*) from cookies where name like 'dsh-auth-%'单调递增;建议修法(任一即可堵住)
dsh-auth-*(最小改动);AUTH_RECORD_KEY = credentialKey("client-connection", "browser-session")),把 secret 持久化,不再按进程随机;--max-http-header-size,并在超限时给出可读错误而不是「认证失败」。临时规避
退出 DSH → 删除
Cookies库中name like 'dsh-auth-%'的行(或整库)→ 重启,会自动签发 1 枚新 cookie。附
All reactions