我们正在向一个供应商托管的远程 Web 服务运行 Java,其中涉及到几个中间人。我们的 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 上运行的任何东西都支持它吗?