dsh-gzip: DeepSeek Harness `/api` 响应 Gzip 压缩插件

前言

DeepSeek Harness (DSH) Web GUI 在加载会话历史时,会将最近 50 条消息的全部原始事件(含流式 chunk)下发。响应体积通常在 4 到 13.4MB 之间,且服务端默认不做压缩。由于浏览器的 RPC 请求存在 30 秒硬超时,在带宽较低或链路不佳的远程访问场景(异地组网、移动网络等)下,传输容易超时,导致界面显示「历史加载失败」。

dsh-gzip 是为此场景设计的过渡性插件,通过压缩 /api 响应,降低带宽占用,从而解决超时导致的历史加载失败问题。

插件说明

dsh-gzip 是 DeepSeek Harness 的 /api 响应 gzip 压缩插件。
* 维护方:社区维护(github.com/040822/dsh-gzip)
* 许可证:MIT
* 定位:过渡性 gzip 补丁,用于 DSH 较早版本

核心功能

  • 压缩 /api 响应:拦截并压缩 /api 路由的返回数据。
  • 降低带宽占用:实测可减少约 91.4% 的体积(例如 13.4MB 压缩至 1.16MB)。
  • 解决加载失败:在低速链路上降低传输时间,避免触发浏览器 30 秒超时中止请求。
  • 实现机制:通过 monkey-patch 替换 /api 路由的 handler,按请求包装 res 对象。
  • 压缩规则:处理 Accept-Encoding: gzip 请求,支持 application/json、*+json、text/* 等响应类型。
  • 不处理流:明确不处理 text/event-stream。

安装与启用

安装前请确保已安装 DeepSeek Harness,且 Node.js 版本为 ^22.19 或 >=24。

使用官方插件安装命令:

dsh plugin --profile web add dsh-gzip

安装完成后,必须重启 DeepSeek Harness Web 服务才能生效。

验证方法

重启服务后,可以通过以下方式确认压缩是否生效:

  1. 使用 curl 命令:
    curl -s -D - -o /dev/null -X POST http://127.0.0.1:3080/api/session.list \
      -H "Content-Type: application/json" -H "Accept-Encoding: gzip" \
      -d '{"type":"client-request","rpcId":"test","method":"session.list","payload":{}}' \
      | grep -i content-encoding
正常输出应包含 `content-encoding: gzip`。
  1. 使用浏览器 DevTools:
    打开 Network 面板,检查任意 session.* 请求的 Response Headers,确认包含 content-encoding: gzip。

兼容性与限制

本插件是针对旧版 DSH 的过渡方案,不适用于 DSH 0.1.2-rc.1 及更高版本。

  • 适用 DSH 版本:>=0.1.0-rc.6 <0.1.1-0 || >=0.1.1-rc.0 <0.1.2-rc.1
  • 不适用版本:0.1.2-rc.1 及更高版本(官方已提供 gzip 中间件并迁移了流式 RPC)
  • 依赖环境:Node.js ^22.19 或 >=24

由于 DSH 0.1.2-rc.1+ 已内置 HTTP gzip 中间件并将流式 RPC 迁移至 WebSocket,本插件在这些版本上不兼容且不建议安装。

结尾

dsh-gzip 通过简单的 monkey-patch 方案,解决了旧版 DSH 在低带宽环境下的历史加载痛点。随着官方版本的更新,该插件已逐渐退出历史舞台,仅作为特定版本下的临时补丁方案存在。

仓库地址:github.com/040822/dsh-gzip

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

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

小夜