【问题标题】:Issues with LWP when using HTTP/1.1: bad chunk-size, truncated responses使用 HTTP/1.1 时 LWP 的问题:块大小错误,响应被截断
【发布时间】:2014-07-02 17:29:25
【问题描述】:

我一直在编写一些 Perl 实用程序来与我公司的一些内部网站进行交互。不久前,我在访问某些页面时开始遇到间歇性错误:“HTTP 响应中的块大小错误”。我将此消息跟踪到模块Net::HTTP::Methods。我花了一点时间试图诊断错误的最终根源,但没有成功。然后在某个地方我发现了一个建议,将我的 HTTP 请求的协议设置为“HTTP/1.0”可能会有所帮助,令我惊讶的是,确实如此。一旦我为所有给我带来问题的页面请求执行此操作,一切顺利。

最近,我一直在编写与本地 Bugzilla 服务器交互的代码。有一个间歇性错误,HTTP 响应在页面中间的某处被截断。起初我很困惑,但后来我想起了我上面描述的问题并尝试将协议设置为 HTTP/1.0。再次,它奏效了。我尝试访问 Bugzilla 的“输入 CR”页面一百次。使用默认的 HTTP/1.1,我的响应被截断了六次;使用 HTTP/1.0,零次。

有人知道这里会发生什么吗?我从来没有在我的浏览器中看到页面截断,这表明问题出在 LWP 库上,但很难相信这样一个古老且广泛使用的库会有如此明显的错误。我使用最新的 Perl 模块运行 Ubuntu,Bugzilla 响应将服务器识别为 Apache,如果这有帮助的话。

【问题讨论】:

    标签: perl http lwp


    【解决方案1】:

    从你的描述中很难看出发生了什么,但是

    • 如果您强制执行 HTTP/1.0,则不允许服务器使用 Transfer-Encoding: chunked 发送数据,因此这可以解释为什么它可以使用 HTTP/1.0
    • Ubuntu 不提供最新版本的 LWP,它们大多只提供对最初发布的版本的更新。哪个版本取决于您的 Ubuntu 版本。您可以使用perl -MLWP::UserAgent -e 'warn LWP::UserAgent->VERSION' 检查已安装的版本。当前版本是 6.06。
    • 如果不获取更多信息,就无法调试问题。基本信息是 LWP 的版本。失败连接的数据包捕获(具有真实内容的 tcpdump,即tcpdump -s0 -wfile ...)对于查看服务器正在发送的数据也非常有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2018-10-11
      • 2020-02-13
      • 2018-03-03
      • 2013-03-02
      • 2014-05-15
      相关资源
      最近更新 更多