解决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
让人很无语的发现,其中Websocket的W是大写的。为什么ie 11系列里面有的版本是跟主流浏览器一样是websocket,个别低版本却是Websocket。
这应该就是跟ie11系列各种问题,所以才出了那么多版本的问题吧。
当然,解决问题的方法显而易见了。将equals该为equalsIgnoreCase。
后面会将WebSocket系列和Netty系列补上,有兴趣的可关注。
如果此文对您有帮助,微信打赏我一下吧~
解决WebSocket兼容ie浏览器版本问题的更多相关文章
- WebSocket兼容到低版本浏览器
就目前而言,WebSocket是最好的Web通信解决方案了.但是IE从10才开始兼容它,对于目前大量IE8存在的市场,原生的WebSocket显然不太实用,我们需要低版本兼容的解决方案.于是我模拟We ...
- 解决Selenium与firefox浏览器版本不兼容问题
因为在用java打开firefox浏览器的时候报错 org.openqa.selenium.firefox.NotConnectedException: Unable to connect to ho ...
- Ajax的完整兼容各种浏览器版本代码
<script type="text/javascript"> function createAjax(){ var request=false; //window对象 ...
- AngularJS开发指南7:AngularJS本地化,国际化,以及兼容IE低版本浏览器
AngularJS本地化,国际化 国际化,简写为i18n,指的是使产品快速适应不同语言和文化. 本地化,简称l10n,是指使产品在特定文化和语言市场中可用. 对开发者来说,国际化一个应用意味着将所有的 ...
- angularjs1+requirejs+ bootstrap+ jQuery低版本配合兼容ie8+浏览器
angularjs兼容低版本IE浏览器(IE8)angularjs在1.3之后的版本都是选择放弃对IE8及更低IE版本的支持,但是就目前的开发形式来看,IE8的使用客户还是蛮多的,最近有个项目要求尽量 ...
- Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法
参考:Visual Studio 2012出现“无法访问T-SQL组件和安装了不兼容伯 DacFx版本”的解决办法 Vs2012的下载地址: https://msdn.microsoft.com/en ...
- html5调用本机摄像头兼容谷歌浏览器高版本,谷歌浏览器低版本,火狐浏览器
做这个功能的时候在网上查了一些资料,代码如下,在这个代码在谷歌浏览器46版本是没问题的,在火狐浏览器也行,但是在谷歌浏览器高版本下是不兼容的 <div id="body"&g ...
- 超出字数部分省略(主要解决不兼容;display: -webkit-box;的浏览器)
注明:内容于http://www.cnblogs.com/chentongtong/p/5474553.html进一步整理. 1.现webkit内核的浏览器支持display: -webkit-box ...
- 多行文字超出字数部分省略(主要解决不兼容;display: -webkit-box;的浏览器)
注明:内容来处https://www.cnblogs.com/ss977/p/5846176.html 1.现webkit内核的浏览器支持display: -webkit-box;属性, 所以网页中显 ...
随机推荐
- Spring装配Bean之组件扫描和自动装配
Spring从两个角度来实现自动化装配: 组件扫描:Spring会自动发现应用上下文中所创建的bean. 自动装配:Spring自动满足bean之间的依赖. 案例:音响系统的组件.首先为CD创建Com ...
- 关于使用连接器arm-linux-ld时指定链接地址的作用
首先,记住一句话:程序的链接地址必须等于运行地址! 在学习exynos 4412的启动过程时,发现自己对链接地址的作用不是很了解,于是上网查找了资料做了基本了解,在此做个总结. 上图是exynos 4 ...
- hdu4821 String
您也可以在我的个人博客中阅读此文章:跳转 题意 一个字符串S 问其中有几个子串能满足以下条件:1.长度为m*l2.可以被分成m个l长的不同的子串问题就变成了如何快速的判断着m个子串是否存在相同的 思路 ...
- CSS3选择器在HTML5中的使用
1,有CLASS属性的input标记 Input[class]{ } 2,class属性是sm的元素 Input[class='sm']{} 3, 凡是class=sm的元素 [class='sm' ...
- Memory Analyzer Tool 使用手记
最近一段时间一直在研究热部署,热部署中涉及到一个比较头痛的问题就是查内存泄露(Memory Leak),于是乎在研究热部署的过程中,干的最多的一件事就是查内存泄露. 查内存泄露,最开始尝试 ...
- LINUX 笔记-find 命令常用用法
命令格式: find path -option [-print] [-exec -ok] -print:find 命令将匹配的文件输出到标准输出 -exec:find 命令对匹配的文件执行该参数所给出 ...
- 2_ROS学习
2_VNC远程连接树莓派 在上一次,我们成功的给树莓派安装了Ubuntu mate的操作系统. 树莓派是嵌入式计算机,一般是没有显示屏来显示的,我们通过远程连接来访问树莓派.网上推荐了ssh连接,xr ...
- Shell中bash的特性小结
Shell: 用户与操作系统之间完成交互式操作的一个接口程序,为用户提供简化了的操作:上世纪的70年代中期在贝尔实验室,Bourne位Unix开发了一个shell程序Bourne Shell,简称sh ...
- Windows 安装 python2.7
Windows 安装 python2.7 python2.7下载地址: https://www.python.org/downloads/release/python-2714/ 安装过程: 设置系统 ...
- CodeForces - 706B 二分stl
#include<iostream> #include<cstdio> #include<cstring> #include<string> #incl ...