使用HTTP / 1.1时LWP的问题:错误的块大小,截断的响应

时间:2014-07-02 17:29:26

标签: perl http lwp

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

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

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

1 个答案:

答案 0 :(得分:0)

从您的描述中看到发生的事情真的很难,但是

  • 如果您强制执行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 ...)对于查看服务器正在发送的数据也非常有用。