前言¶
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 服务才能生效。
验证方法¶
重启服务后,可以通过以下方式确认压缩是否生效:
- 使用 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`。
- 使用浏览器 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 在低带宽环境下的历史加载痛点。随着官方版本的更新,该插件已逐渐退出历史舞台,仅作为特定版本下的临时补丁方案存在。