我们正在将Java运行到由供应商托管的远程Web服务,并涉及几个中间人。我们的Java代码(托管在IBM WebSphere Application Server上)很简单,如下所示:
URLConnection connection = url.openConnection();
...
connection.getOutputStream().write(...);
计算机由思科 ACE 负载平衡器进行负载平衡,网络在通往远程 Web 服务的途中有两个 BlueCoat 代理。
大多数情况下,它工作正常,但(平均)供应商网络服务每天收到一次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
我们怀疑代理或负载平衡器,有人有在思科ACE或BlueCoat上看到这种情况的经验吗?或者这实际上可能是我们这边的问题,连接突然尝试创建隧道?Java SE或WAS上运行的任何内容是否支持这一点?
看起来像一个HTTP隧道。
您可以在 http://en.wikipedia.org/wiki/HTTP_tunnel 查看
签名 Frantisek 给我发了一封电子邮件,其中包含此错误的可能原因,一个 JRE 错误,谢谢!综上所述,原因似乎是HTTPS连接的重用。
(现在只剩下让IBM修复WebSphere,然后我们的SP更新他们的英国媒体报道软件。