HTTP协议错误
HTTP protocol error
我们正在 运行 Java 提供由供应商托管的远程 Web 服务,其中涉及几个中间人。我们的 Java 代码(托管在 IBM WebSphere Application Server 上)很简单,类似于:
URLConnection connection = url.openConnection();
...
connection.getOutputStream().write(...);
机器由 Cisco ACE 负载平衡器进行负载平衡,并且网络在通往远程 Web 服务的途中有两个 BlueCoat 代理。
大部分时间它工作正常,但(平均)每天供应商 Web 服务接收一次 HTTP CONNECT 而不是预期的 HTTP POST。这是来自不正确的 HTTP CONNECT 的访问日志的示例,下面是一个典型且正确的 HTTP POST:
Mar 3 05:15:07 lon-vm-lb01/lon-vm-lb01 logger[28882]: aaa.bbb.ccc.ddd - - [03/Mar/2014:05:15:04 +0000] host.com "CONNECT host.com:443 HTTP/1.1" 403 13 "-" "Java/1.7.0" "-" 810 358 331
Mar 3 05:26:05 lon-vm-lb01/lon-vm-lb01 logger[28882]: aaa.bbb.ccc.ddd - - [03/Mar/2014:05:26:03 +0000] host.com "POST /url/path HTTP/1.1" 200 1842 "-" "Java/1.7.0" "-" 875645 1229 2114
我们怀疑是代理或负载均衡器,有人在 Cisco ACE 或 BlueCoat 上看到过这种情况吗?或者这实际上是我们这一端的问题,连接突然尝试创建隧道? Java SE 或 WAS 上的 运行 是否支持它?
它看起来像一个 HTTP 隧道。
查看
Signature Frantisek 向我发送了一封电子邮件,其中包含此错误的可能原因,一个 JRE bug,谢谢!综上所述,原因似乎是重用了 HTTPS 连接。
(现在只剩下让 IBM 修复 WebSphere,然后让我们的 SP 更新他们的过时软件。)
我们正在 运行 Java 提供由供应商托管的远程 Web 服务,其中涉及几个中间人。我们的 Java 代码(托管在 IBM WebSphere Application Server 上)很简单,类似于:
URLConnection connection = url.openConnection();
...
connection.getOutputStream().write(...);
机器由 Cisco ACE 负载平衡器进行负载平衡,并且网络在通往远程 Web 服务的途中有两个 BlueCoat 代理。
大部分时间它工作正常,但(平均)每天供应商 Web 服务接收一次 HTTP CONNECT 而不是预期的 HTTP POST。这是来自不正确的 HTTP CONNECT 的访问日志的示例,下面是一个典型且正确的 HTTP POST:
Mar 3 05:15:07 lon-vm-lb01/lon-vm-lb01 logger[28882]: aaa.bbb.ccc.ddd - - [03/Mar/2014:05:15:04 +0000] host.com "CONNECT host.com:443 HTTP/1.1" 403 13 "-" "Java/1.7.0" "-" 810 358 331
Mar 3 05:26:05 lon-vm-lb01/lon-vm-lb01 logger[28882]: aaa.bbb.ccc.ddd - - [03/Mar/2014:05:26:03 +0000] host.com "POST /url/path HTTP/1.1" 200 1842 "-" "Java/1.7.0" "-" 875645 1229 2114
我们怀疑是代理或负载均衡器,有人在 Cisco ACE 或 BlueCoat 上看到过这种情况吗?或者这实际上是我们这一端的问题,连接突然尝试创建隧道? Java SE 或 WAS 上的 运行 是否支持它?
它看起来像一个 HTTP 隧道。
查看Signature Frantisek 向我发送了一封电子邮件,其中包含此错误的可能原因,一个 JRE bug,谢谢!综上所述,原因似乎是重用了 HTTPS 连接。
(现在只剩下让 IBM 修复 WebSphere,然后让我们的 SP 更新他们的过时软件。)