解决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系列补上,有兴趣的可关注。

若是此文对您有帮助,微信打赏我一下吧~

相关文章
相关标签/搜索