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


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

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

1.調試

后台日志打印:

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客戶端連接服務器后,立即觸發了斷開事件,是什么原因呢?

debug,問題鎖定代碼塊:

2.思考

在判斷是否可升級成WebSocket協議時,發現該Http協議無法升級成ws協議,從而返回異常。

難道該ie版本不支持WebSocket?換成javaee-api-7.0.jar或者tomcat自帶的websocket包測試都通過,所以確定該版本還是兼容WebSocket的。

目前各瀏覽器支持的WebSocket版本和服務器netty的WebSocket版本都是13。到底是什么原因呢?

在不同瀏覽器下測試看看,打印:req.getDecoderResult().isSuccess()和req.headers().get("Upgrade")的值到底是什么。!!!

3.解決

測試結果:

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

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

讓人很無語的發現,其中WebsocketW是大寫的。為什么ie 11系列里面有的版本是跟主流瀏覽器一樣是websocket,個別低版本卻是Websocket。

這應該就是跟ie11系列各種問題,所以才出了那么多版本的問題吧。

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

 

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

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM