0

我们面临一个问题,我们的 IBM HTTP 服务器返回“400 Bad Request”错误,我们无法找到原因。

该请求是一个 SOAP 请求,应该由 Tibco SOAP 服务提供服务,但该请求没有到达应用程序(应用程序日志中没有相同的日志) - 并且在 HTTP 服务器级别出错。

我们使用的 HTTP 服务器仅作为代理,只是将请求传递给应用程序。

从访问日志:

10.239.12.250 - - [17/Nov/2016:10:23:19 +0000] “POST /OnlineCheck HTTP/1.1”400 - 300 “Java1.7.0_40”300/300021637

当我检查错误日志时:

[2016 年 11 月 17 日星期四 10:28:19] [错误] (70007) 指定的超时已过期:代理:预取请求正文未能从 10.213.123.12 到 [::1]:9876 (temp.adv.com)

从日志中可以看出,在收到请求 5 分钟后返回错误。

需要注意的几点:

该错误仅来自一个客户端(多个客户端使用相同的服务)并且他们使用 OSB/Weblogic 进行负载平衡

这仅发生在 10-20% 的请求中,并且是随机的。负载均衡器再次发送相同的请求(2.5分钟后没有得到任何响应,服务器正常响应)

我想知道是否有任何方法可以捕获错误可能是由于什么原因造成的?400\Bad Request Error 的可能原因是什么?

4

1 回答 1

1

错误消息意味着 mod_proxy 等待 POST 正文并且它从未被客户端传输。因此客户端发送的 Content-Length 或 Transfer-Encoding: chunked 无效,导致 400 状态码。

您可以取消注释“mod_net_trace”的 LoadModule 以记录为这些请求完成的 I/O 并查看预期的主体类型并确认它永远不可用。

如果您不信任传输内容的内部视图,您可以使用数据包捕获来确认相同的事情。

于 2016-12-01T14:53:22.427 回答