Jetty HttpClient通过代理使用SSL进行连接



我有一个Jetty的HttpClient的设置,它使用SSL连接到apache http服务器,该服务器将请求作为http路由到web服务器:

HttpClient&lt--HTTPS-->http服务器&lt--HTTP-->web服务器。

此设置已经运行了一段时间
我现在正在尝试添加代理:
HttpClient&lt--HTTPS使用CONNECT方法-->代理&lt--HTTPS-->http服务器&lt--HTTP-->web服务器

我正在使用以下代码来设置代理:

httpClient.setProxy(新地址("proxyHost",proxyPort));

代理不需要身份验证。

SSL握手似乎开始得很好,看看TCP转储,我可以看到我得到了"服务器你好"的响应。但是,握手稍后失败,http服务器日志中显示以下错误:

〔2013年6月26日星期三12:49:42〕〔debug〕ssl_engine_io.c(1925):OpenSSL:I/O错误,预计在BIO#7faefe130d00上读取5个字节〔mem:7faefe11f203〕

由于握手失败,因此不会将HTTP请求转发到web服务器。

使用相同的设置,但使用url.openConnection()和HttpsURLConnection配置替换Jetty HttpClient,如中所述https://stackoverflow.com/a/1512268/378060运行良好。

配置代理和证书后从浏览器连接也可以。

版本详细信息:
Jetty HttpClient:已尝试7.4.2、7.6.11、8.1.11(Windows)
代理是squid 2.7(Windows)
apache http服务器2.2.15(linux)

问题与此处描述的问题相同:http://dev.eclipse.org/mhonarc/lists/jetty-users/msg01854.html.
Squid 2.7与Http 1.1不兼容,但与Http 1.0兼容,因此它没有用keep-alive标头响应Jetty的Proxy Connection:keep-aliive标头。Jetty随后被迫根据Http1.0规则关闭连接。

最新更新