zoukankan      html  css  js  c++  java
  • 解决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系列补上,有兴趣的可关注。

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

  • 相关阅读:
    ORA-01219:数据库未打开:仅允许在固定表/视图中查询
    RMAN-08137: WARNING: Archived Log Not Deleted, Needed For Standby Or Upstream Capture Proces
    SSDB 安装部署及注意事项总结
    Keepalived安装与配置
    MongoDB安装与配置
    mysql数据库优化建议
    mysql数据库主从复制搭建
    MySQL MHA安装与配置
    CDH版本的hadoop下载
    centos7下载
  • 原文地址:https://www.cnblogs.com/Joanna-Yan/p/7942323.html
Copyright © 2011-2022 走看看