解決WebSocket兼容ie瀏覽器版本問題

轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/7942323.html html

在使用Netty進行WebSocket開發時,測試發現:ie 11系列個別低版本鏈接WebSocket後當即自動斷開了鏈接。如,ie 11.0.38。java

1.調試

後臺日誌打印: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,問題鎖定代碼塊:瀏覽器

2.思考

在判斷是否可升級成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

3.解決

測試結果:socket

用其餘瀏覽器測試,打印結果都是:true;websocket

惟獨用ie 11系列個別版本測試,打印的結果是:true;Websocket

讓人很無語的發現,其中WebsocketW是大寫的。爲何ie 11系列裏面有的版本是跟主流瀏覽器同樣是websocket,個別低版本倒是Websocket。

這應該就是跟ie11系列各類問題,因此纔出了那麼多版本的問題吧。

固然,解決問題的方法顯而易見了。將equals該爲equalsIgnoreCase。

 

後面會將WebSocket系列和Netty系列補上,有興趣的可關注。

若是此文對您有幫助,微信打賞我一下吧~

相關文章
相關標籤/搜索