Netty 3.10.0.FINAL说;无效的版本格式:<;!DOCTYPE";

Netty 3.10.0.FINAL说;无效的版本格式:<;!DOCTYPE";,netty,illegalargumentexception,finagle,Netty,Illegalargumentexception,Finagle,我们使用Twitter的Finagle客户端,它使用Netty作为HTTP客户端。对于我们的一个web服务调用,我们发现Netty无法确定响应的HTTP版本,从而导致 2017-01-13 11:28:13,825 [finagle/netty3-1] WARN com.twitter.finagle.netty3.channel.ChannelStatsHandler ChannelStatsHandler caught an exception java.lang.IllegalArgume

我们使用Twitter的Finagle客户端,它使用Netty作为HTTP客户端。对于我们的一个web服务调用,我们发现Netty无法确定响应的HTTP版本,从而导致

2017-01-13 11:28:13,825 [finagle/netty3-1] WARN com.twitter.finagle.netty3.channel.ChannelStatsHandler ChannelStatsHandler caught an exception
java.lang.IllegalArgumentException: invalid version format: <!DOCTYPE

我的猜测是,调用失败是因为某些iTerMedia系统返回一个“中断”响应,而我无法用CURL触发该响应。因此,我的第二个问题是,系统是否可能在没有Http版本的情况下返回响应,以及我在这里的想法是否正确。

我们使用https时,没有在Finagle客户端上设置withTls选项

我们的解决方案是使用
com.twitter.Finagle.Http.withTls(字符串主机名)
选项创建Finagle客户端,在我们的特定情况下,还可以将Java的SSL上下文设置为TLS版本1.2:

SSLContext sslContext = null;
try {
    sslContext = SSLContext.getInstance("TLSv1.2");
    SSLContext.setDefault(sslContext );
} catch (NoSuchAlgorithmException e) {
    log.error("Failure getting ssl context", e);
}
在这些改变之后,问题消失了

SSLContext sslContext = null;
try {
    sslContext = SSLContext.getInstance("TLSv1.2");
    SSLContext.setDefault(sslContext );
} catch (NoSuchAlgorithmException e) {
    log.error("Failure getting ssl context", e);
}