dsh-cookie-fix:限制桌面端 dsh-auth 會話 cookie,避免 HTTP 431 無法啓動

前言

DeepSeek Harness 桌面端每次啓動都會在本地隨機迴環端口上跑 webserver,並通過 GET / 做一次啓動令牌交換。交換過程會寫入名字形如 dsh-auth-* 的會話 cookie,有效期 30 天。Cookie 按主機存儲、不區分端口,因此多次啓動後,同一主機(例如 127.0.0.1)下的 jar 裏會不斷累積這些 cookie。

桌面歡迎握手使用 credentials: "include" 發起請求,會把整個 jar 一併帶上。累計啓動次數足夠多後,Cookie 請求頭可能超過 Node.js 默認約 16 KiB 的上限,服務器返回 HTTP 431 Request Header Fields Too Large,界面表現爲 desktop welcome: Web authentication failed,應用無法正常進入。

下面介紹社區插件 dsh-cookie-fix(維護者 qiongqi-empty):在 Host 側自動把 dsh-auth-* 控制在 3 條以內,從機制上避免再頂到請求頭上限。它是 Host-only 的 DSH bundle,不依賴 pnpm 包、沒有構建步驟,通過官方插件管理器安裝即可。

這是什麼

dsh-cookie-fix 是僅運行在 DSH Host 上的插件 bundle(包名 dsh-cookie-fix,界面顯示爲 Cookie 清理器 / Cookie Fix)。它不修改 app.asar、不注入客戶端腳本、不註冊後臺進程,只在桌面端 webserver 上對特定響應做 cookie 清理。

倉庫地址:https://github.com/qiongqi-empty/dsh-cookie-fix。當前 package 版本爲 1.0.0,許可證 MIT。插件在 DeepSeek Harness Desktop 0.2.1-rc.5(nightly,Electron 44)上開發並驗證;未在 engines.dsh 中寫死版本號,實現只依賴 webServer 服務與 Node 標準庫。

核心功能

插件在 DSH Host 的 webserver 上註冊請求監聽器,只處理每次啓動時的 GET /(啓動令牌交換):

  1. 解析請求裏已有的 dsh-auth-* cookie;
  2. 保留「當前 authority 對應的一條(本次響應會重新簽發)+ 最新 2 條舊 cookie」;
  3. 在同一 HTTP 響應裏追加 Set-Cookie,對其餘舊 cookie 設置 Max-Age=0 等刪除指令。

Electron session 與 Chromium 會執行這些刪除指令,因此每次啓動後 jar 裏最多剩 3 條 dsh-auth-*,請求頭體積不會無限增長。新簽發的 auth cookie 仍排在第一個 Set-Cookie,不改變桌面端讀取 cookie 的既有邏輯。

行爲邊界(來自 README):

  • 僅在 GET / 且請求中確實帶有 3 條以上 dsh-auth-* 時才改響應頭;平時不改動任何響應。
  • 不聯網,不讀取、不上報 cookie 值;只根據 cookie 名稱與簽名 payload 中的 issuedAt 排序並刪除已隨請求發送的舊項。
  • 卸載 bundle 後監聽器隨 plugin fiber 釋放,桌面端恢復官方行爲;殘留的少量 cookie 會在 30 天內自然過期。

安裝與啓用

圖形界面(官方 Plugins 頁面)

  1. 打開 DeepSeek Harness 的 插件 / Plugins 頁面。
  2. 點 添加插件。
  3. 粘貼下面地址(不要帶末尾斜槓):
https://github.com/qiongqi-empty/dsh-cookie-fix
  1. 點 安裝。列表中出現 Cookie 清理器 / Cookie Fix(dsh-cookie-fix)且爲啓用狀態即可。
  2. 若頁面提示需重啓才能加載新插件,重啓一次 DeepSeek Harness。

裝好後每次啓動都會自動清理多餘的 dsh-auth-*,無需額外配置或手動操作。若從 GitHub 安裝超時,可在對話框裏切換 安裝源 → 中國大陸鏡像,或改用命令行安裝。

命令行(等價)

dsh plugin --profile desktop add https://github.com/qiongqi-empty/dsh-cookie-fix

卸載

  • 圖形界面:插件頁面 → 已安裝 → dsh-cookie-fix / Cookie 清理器 → 卸載。
  • 命令行:
dsh plugin --profile desktop remove dsh-cookie-fix

典型用法

正常使用下沒有單獨「調用 API」的步驟:安裝並啓用後,插件隨桌面端啓動生效。

若已出現 431、應用完全打不開,需要先讓 Harness 能再次啓動。插件必須在應用能跑起來之後才能安裝。README 給出的恢復步驟如下:

  1. 完全退出 DeepSeek Harness(含托盤圖標)。
  2. 刪除 Chromium 的 cookie 數據庫(僅重置本地網頁 cookie,不影響 ~/.dsh 裏的賬號憑據)。Windows 路徑示例:
%APPDATA%\@deepseek-ai\dsh-desktop\Network\Cookies
  1. 重新啓動 DeepSeek Harness,再按上文步驟安裝插件。

開發者可在不啓動 DSH 的情況下跑倉庫自帶自測:

node test.mjs

README 說明該腳本驗證:10 條 cookie 時恰好追加 7 條刪除、新 auth cookie 仍排第一、cookie 少時不改響應、其它路徑不受影響。

適用場景與注意

適合誰:長期使用 DeepSeek Harness 桌面端、頻繁重啓或升級、曾遇到或想預防 HTTP 431 / Web authentication failed 的開發者。

權限與安全:插件以當前 DSH 進程權限運行,邏輯集中在單文件 index.mjs,安裝前建議自行閱讀源碼與 MIT 許可證。社區插件目錄(如 SkillHub 上的條目頁)是獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;安裝來源以你信任的 GitHub 倉庫爲準。

不適用或需知:純 CLI / 非 desktop profile 若不存在相同 cookie 累積問題,則不必安裝;若未來 DSH 移除 webServer 服務,插件會安全地不生效,不會阻止 Harness 啓動。

結尾

dsh-cookie-fix 用 Host 側、可逆的方式把隨機端口帶來的 dsh-auth-* 堆積限制在 3 條以內,針對 Node 16 KiB 請求頭上限導致的桌面啓動失敗給出固定解法。需要時可從 Plugins 頁面或 CLI 安裝,不需要時卸載 bundle 即可恢復官方行爲。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜