2017-01-13 4 views
1

NettyをHTTPクライアントとして使用するTwitterのFinagleクライアントを使用しています。私たちは、ネッティーは、HTTPのバージョンを確認しようとしているNetty 3.10.0.FINALは「無効なバージョン形式:<!DOCTYPE」と答えています

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 

網状のorg.jboss.netty.handler.codec.http.HttpVersionクラスで、その結果、応答のHTTPのバージョンを確認することができない私たちのWebサービス呼び出しの1を参照(HTTP/1.1、HTTP/1.0)文字列<!DOCTYPEに基づいています。それは明らかに機能しません。一致が失敗し、上記のIllegalArgumentExceptionが発生します。

このため、私のアプリケーションでは何の応答も得られません。 Nettyは例外をスローし、それだけです。

私の質問は、NettyがHttpVersionクラスのHTTPバージョンとの一致の入力として<!DOCTYPEを使用していた可能性があることです。

この問題が発生したサービスをCURLで呼び出すと、適切なHTTPバージョンで適切な応答が得られます。以下は、カールするHTTPヘッダーです。私はまた、<!DOCTYPEで始まらない適切な体を得る。それは<SOAP-ENVELOPE..で始まる形式のSOAP応答です。

HTTP/1.1 200 OK 
Date: Fri, 13 Jan 2017 12:25:14 GMT 
Server: Apache-Coyote/1.1 
Content-Type: text/xml;charset=utf-8 
Connection: close 
Transfer-Encoding: chunked 

私の推測では、いくつかのitermediateシステムは、私はCURLをトリガーすることができなかったことを、「壊れた」応答を返すため、失敗コールが発生するということです。ですから、私の2番目の質問は、システムがHttpバージョンなしで応答を返すことが可能で、私がここで正しい方向に考えていれば可能であるかどうかということです。

答えて

0

FinagleクライアントでwithTlsオプションを設定せずにhttpsを使用していました。

たちのためのソリューションには、TLSバージョン1.2にJavaのSSLコンテキストを設定するために、私たちの特別な場合には、com.twitter.finagle.Http.withTls(String hostName)オプションを使用してFinagleクライアントを作成することだったと:問題が消え、これらの変更後

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

関連する問題