issue: “Not enough data to satisfy transfer length header.” error interrupts responses

该报错通常出现在 Open WebUI 通过 aiohttp 向模型提供方发起流式请求时,响应流在中途被截断,导致客户端收到不完整的 HTTP 传输内容;优先排查容器内的 HTTP_PROXY / HTTPS_PROXY 代理环境变量,以及上游提供方或自建 Ollama 的流式连接是否稳定。

快速结论:该报错通常出现在 Open WebUI 通过 aiohttp 向模型提供方发起流式请求时,响应流在中途被截断,导致客户端收到不完整的 HTTP 传输内容;优先排查容器内的 HTTP_PROXY / HTTPS_PROXY 代理环境变量,以及上游提供方或自建 Ollama 的流式连接是否稳定。

适用环境:Open WebUI v0.9.5(Issue 报告),Docker 部署;操作系统 macOS Sonoma;浏览器 Zen Browser 1.19.12b(Firefox 150.0.2,aarch64);使用 GLM-5.1(Z.ai,open.bigmodel.cn OpenAI 兼容端点),开启流式与原生函数调用。Issue 中未提供 Python、CUDA、显卡或 PyTorch 版本。

最快修复方案:Issue 中经报告者确认有效的处理方式是:从容器运行环境中移除 HTTP_PROXY 和 HTTPS_PROXY。该改动可优先尝试。

注意事项:代理环境变量只是已确认的触发条件之一,并非所有复现路径都适用;Issue 中也有其他用户在不同版本(0.9.6、0.11、0.11.1、0.11.4)继续遇到该报错,且维护者表示无法复现。若移除代理后问题仍在,需要按下方步骤继续排查上游流式连接与超时设置。

问题场景

用户通过 Docker 运行 Open WebUI v0.9.5,在聊天界面提交提示词后,使用基于 GLM-5.1 的自定义智能体(Z.ai 的 OpenAI 兼容端点),并开启流式输出和原生函数调用。通常在一段会话的前几轮提示词之后、上下文达到约 20k–30k tokens 且包含多次工具调用时触发。响应会先正常生成若干行内容,然后被中断并弹出上述错误。重新生成同样会失败。相同配置在其他客户端上未出现问题,因此报告者排除了单纯的上游提供方故障。后续讨论中,该现象也被报告出现在自建 Ollama 场景,Ollama 日志中没有错误,只记录到一次耗时接近整 30 秒的 /api/chat POST 请求。

报错原文

Response payload is not completed: <TransferEncodingError: 400, message='Not enough data to satisfy transfer length header.'>
ERROR    | open_webui.main:process_chat:2013 - Error processing chat payload: Response payload is not completed: <TransferEncodingError: 400, message='Not enough data to satisfy transfer length header.'>

原因分析

该错误文本来自 aiohttp(参见 aio-libs/aiohttp#4630),表示 HTTP 响应体没有按 Transfer-Encoding 或 Content-Length 声明完整送达,连接在流中途被中断,Open WebUI 随后把被截断的流当作异常响应处理。

可能原因包括:上游提供方或自建 Ollama 的流式连接被中途断开;容器内的 HTTP_PROXY / HTTPS_PROXY 代理影响了长连接流式传输(已有报告者确认移除后恢复);报告者还怀疑 aiohttp 未遵守显式设置的 AIOHTTP_CLIENT_TIMEOUT,在约 30 秒后提前终止流。讨论中另有用户指出该问题可能与 0.9.6 引入的变更有关,回退到 0.9.5 可恢复,但维护者表示无法复现,因此版本相关说法尚未被确认。

环境排查

  • 确认 Open WebUI 版本:Issue 报告使用 v0.9.5,后续评论涉及 0.9.6、0.11、0.11.1、0.11.4。
  • 确认部署方式是否为 Docker,以及容器内是否设置了 HTTP_PROXY、HTTPS_PROXY(包括 Docker Compose 的 environment 或 .env 注入)。
  • 确认模型提供方:Z.ai 的 open.bigmodel.cn OpenAI 兼容端点,或自建 Ollama。
  • 确认是否开启流式输出与原生函数调用。
  • 确认请求上下文规模:Issue 中触发时约为 20k–30k tokens 且包含多次工具调用。
  • 确认 AIOHTTP_CLIENT_TIMEOUT 的实际设置值,并观察流是否在固定时长(如约 30 秒)后被切断。
  • 确认上游服务端日志:报告者称 Ollama 日志中无报错,仅有一次接近 30 秒的 /api/chat POST。
  • 确认是否通过 /api/chat/completions 以 API 方式调用;该路径下同一 aiohttp 失败可能不会返回错误帧,而是直接切断流。

解决步骤

  1. 优先尝试移除容器运行环境中的 HTTP_PROXY 和 HTTPS_PROXY,然后重启 Open WebUI 容器复测。Issue 中有报告者确认该操作解决了问题。
  2. 若无法移除代理,检查代理是否会对长连接流式响应做超时或缓冲处理;Issue 中未提供具体代理配置,需结合自身网络环境判断。
  3. 复测时记录流被切断的时长,判断是否固定出现在约 30 秒,以确认是否与超时相关。
  4. 同时查看上游提供方或 Ollama 服务端日志,确认连接是被服务端、代理还是客户端中断。
  5. 如果问题出现在升级之后,可考虑在测试实例中回退到问题出现前的版本(如报告者所述的 v0.9.5)做对照,但注意 v0.9.3 起存在破坏性数据库迁移,回退前需确认备份可用。
  6. 如果通过 API 调用 /api/chat/completions,注意该路径下错误可能不会以错误帧形式返回,需要检查流是否被静默切断。

验证方法

重新发起相同场景的对话(相同智能体、流式与函数调用开启、上下文规模相近),确认响应能够完整生成到结束,不再出现 Not enough data to satisfy transfer length header.,并且容器日志中不再出现 Error processing chat payload。若通过 /api/chat/completions 调用,需确认流式响应完整结束,而不是在中途被静默切断。

参考来源

open-webui/open-webui #24559

aio-libs/aiohttp #4630

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 27732

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注