1

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

HttpClient <--HTTPS--> http 服务器 <--HTTP--> 网络服务器。

这个设置已经工作了一段时间。
我现在正在尝试添加代理:
HttpClient <--HTTPS using CONNECT method--> proxy <--HTTPS--> http server <--HTTP--> web server

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

httpClient.setProxy(new Address("proxyHost", proxyPort));

代理不需要身份验证。

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

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

由于握手失败,没有 HTTP 请求被转发到 Web 服务器。

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

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

版本详情:
Jetty HttpClient:试过 7.4.2、7.6.11、8.1.11 (Windows)
代理是 squid 2.7 (Windows)
apache http server 2.2.15(linux)

4

1 回答 1

0

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

于 2013-07-08T06:11:11.517 回答