我负责维护使用Java 8在Tomcat 8.0.33中运行的webapp,它使得一些出站HTTPS restlet连接到另一个服务(即webapp是一个重定向客户端)。
webapp正在使用Restlet 2.0.11。 (我意识到这是旧的,但就目前来说,无论如何,我需要玩我已经被处理过的手。)
我被要求让webapp在HTTP代理后面工作。作为一个丑陋的快速和肮脏的测试,我只需将JVM范围的代理属性(http.proxyHost
,https.proxyHost
等)设置为指向代理。
我可以看到流量进入代理但请求显示格式错误,代理的响应是请求无效,而restlet客户端抛出异常:
2016-05-02 19:47:23,643 org.restlet WARN [Restlet-279974262]: Exception while writing the message headers.
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
at sun.security.ssl.SSLSocketImpl.checkEOF(Unknown Source) ~[na:1.8.0_45]
at sun.security.ssl.SSLSocketImpl.checkWrite(Unknown Source) ~[na:1.8.0_45]
at sun.security.ssl.AppOutputStream.write(Unknown Source) ~[na:1.8.0_45]
at java.io.BufferedOutputStream.flushBuffer(Unknown Source) ~[na:1.8.0_45]
at java.io.BufferedOutputStream.flush(Unknown Source) ~[na:1.8.0_45]
at org.restlet.engine.http.connector.Connection.writeMessageHead(Connection.java:907) [org.restlet-2.0.11.jar:na]
at org.restlet.engine.http.connector.Connection.writeMessageHead(Connection.java:921) [org.restlet-2.0.11.jar:na]
at org.restlet.engine.http.connector.Connection.writeMessage(Connection.java:796) [org.restlet-2.0.11.jar:na]
at org.restlet.engine.http.connector.ClientConnection.writeMessage(ClientConnection.java:314) [org.restlet-2.0.11.jar:na]
at org.restlet.engine.http.connector.Connection.writeMessages(Connection.java:954) [org.restlet-2.0.11.jar:na]
at org.restlet.engine.http.connector.Controller$1.run(Controller.java:81) [org.restlet-2.0.11.jar:na]
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.8.0_45]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.8.0_45]
at java.lang.Thread.run(Unknown Source) [na:1.8.0_45]
在我进一步尝试调试之前,我想知道Restlet框架何时正式开始通过HTTP代理支持HTTPS请求?我想知道内部客户端和Apache HttpClient客户端选项的答案。
我已经在bug数据库中进行了一些搜索并发现了一些可能相关的问题,但是2.0.11就像是4年之久,并且bug过程中的bug数据库从过去的任何地方迁移到了github当我看到一些标记为“Unplanned”的东西时,我不确定这意味着什么。
那么HTTP代理支持何时进入?