轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/7942323.html html
在使用Netty進行WebSocket開發時,測試發現:ie 11系列個別低版本鏈接WebSocket後當即自動斷開了鏈接。如,ie 11.0.38。java
後臺日誌打印:web
WebSocket handlerAdded handlerAdded---WS管道標識:00000000000000e0-00002520-0000001b-e9a4ab6f2de6f7bb-aa79b5c5 WebSocket channelActive WebSocket channelRead0 WebSocket channelReadComplete WebSocket channelInactive WebSocket handlerRemoved handlerRemoved---WS管道標識:00000000000000e0-00002520-0000001b-e9a4ab6f2de6f7bb-aa79b5c5 WebSocket handlerAdded handlerAdded---WS管道標識:00000000000000e0-00002520-0000001c-c5d7cd14ade6fbc9-50bf51ea WebSocket channelActive WebSocket channelRead0 WebSocket channelReadComplete WebSocket channelInactive WebSocket handlerRemoved handlerRemoved---WS管道標識:00000000000000e0-00002520-0000001c-c5d7cd14ade6fbc9-50bf51ea
發現,WebSocket客戶端鏈接服務器後,當即觸發了斷開事件,是什麼緣由呢?api
debug,問題鎖定代碼塊:瀏覽器
在判斷是否可升級成WebSocket協議時,發現該Http協議沒法升級成ws協議,從而返回異常。tomcat
難道該ie版本不支持WebSocket?換成javaee-api-7.0.jar或者tomcat自帶的websocket包測試都經過,因此肯定該版本仍是兼容WebSocket的。服務器
目前各瀏覽器支持的WebSocket版本和服務器netty的WebSocket版本都是13。究竟是什麼緣由呢?微信
在不一樣瀏覽器下測試看看,打印:req.getDecoderResult().isSuccess()和req.headers().get("Upgrade")的值究竟是什麼。!!!websocket
測試結果:socket
用其餘瀏覽器測試,打印結果都是:true;websocket
惟獨用ie 11系列個別版本測試,打印的結果是:true;Websocket
讓人很無語的發現,其中Websocket的W是大寫的。爲何ie 11系列裏面有的版本是跟主流瀏覽器同樣是websocket,個別低版本倒是Websocket。
這應該就是跟ie11系列各類問題,因此纔出了那麼多版本的問題吧。
固然,解決問題的方法顯而易見了。將equals該爲equalsIgnoreCase。
後面會將WebSocket系列和Netty系列補上,有興趣的可關注。
若是此文對您有幫助,微信打賞我一下吧~