通过代理排查 ERR_INVALID_CHUNKED_ENCODING
对比响应的分帧方式、停止位置和代理链路日志,定位响应在何处变得不完整或格式错误。
ERR_INVALID_CHUNKED_ENCODING 表示响应无法被解码为完整的 chunked 消息。部分内容成功到达,并不能证明响应其余部分也是有效的。
- 保留响应头和第一条解码器错误。 确定是哪个组件报告了它,以及消息是否被声明为 chunked。
- 定位停止位置。 HTTP/1.1 chunked 编码需要长度、对应数据、分隔符和终止块,并在适用时包含 trailers。连接提前关闭与长度格式错误是两条不同的线索。
- 在预期链路上对比同一个受控请求。 将请求与代理和上游日志进行比对。查看该位置是否存在上游关闭、中间环节的改写或应用取消。
不要根据 TCP 缓冲区大小推断 HTTP 分帧。 一次套接字读取可能包含半个数据块或若干个数据块;随后库可能把已解码内容放进不同的缓冲区。JSON 记录又有另一层边界。代理可以在不保留原始数据包边界的情况下重新分帧响应。
如果证据指向较旧的 Squid 实现,请把它的发行版本号与该结论一并保留。Squid 2.x 的补丁建议并不描述当前的每一个版本。对比时请保持正常的解码和证书校验:压制错误可能让一个不完整的文件看起来像成功下载。