我們使用Twitter的Finagle客戶端,它使用Netty作爲其HTTP客戶端。我們看到了我們的Web服務調用的一個Netty中無法確定響應的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
的Netty的org.jboss.netty.handler.codec.http.HttpVersion
類是試圖確定的HTTP版本(HTTP/1.1,HTTP/1.0)基於字符串<!DOCTYPE
。這顯然不會起作用。該匹配失敗導致上面的IllegalArgumentException。
因爲這個原因,我沒有在我的應用程序中收到回覆。 Netty引發異常,就是這樣。
我的問題是爲什麼Netty可能使用<!DOCTYPE
作爲HttpVersion類中的HTTP版本匹配的輸入。
當我使用CURL調用發生此問題的服務時,我得到了適當的HTTP版本的正確響應。以下是curl返回的HTTP標頭。我也得到了一個合適的身體,這不以<!DOCTYPE
開頭。這是一個格式良好的SOAP響應,以<SOAP-ENVELOPE..
開頭。
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系統會返回一個「破」的反應,我一直無法與捲曲觸發。所以我的第二個問題是,如果系統能夠在沒有Http版本的情況下返回響應,並且我正在考慮以正確的方向進行操作。