ie8下tcp长连接带来的问题

crowgns crowgns 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
背景:
公司一个产品是使用gwt的B/S架构应用,很多页面定时发送ajax请求和服务端交互数据刷新页面,交互的数据都放在body里,响应的状态信息通过http code而是通过响应的body体返回。
最近测试部报在ie8下,停留在有定时刷新的页面,不做任何操作有时会提示有未知错误,几率很低。开发发现前端有两个错误会连续报出,一个是提示没有需要的body,另一个是505 不支持的浏览器并发。用wireshark抓包,tcp内容如下,其中红色是请求:

POST /Console/console/alert_log HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://192.168.1.151:8080/Console/Console.html#basicservice/home
Content-Type: text/xml; charset=UTF-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322)
Host: 192.168.1.151:8080
Content-Length: 177
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: user_id=test; user_name=test; JSESSIONID=97D98075F4F4AACE3E2DC7882671F9D5

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/xml
Content-Length: 170
Date: Wed, 09 Nov 2011 09:28:19 GMT

<status type='Bad Request' code='400' message='没有需要的实体元素'/>POST /Console/console/alert_log HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://192.168.1.151:8080/Console/Console.html#basicservice/home
Content-Type: text/xml; charset=UTF-8
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 1.1.4322)
Host: 172.16.201.151:8080
Content-Length: 177
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: user_id=test; user_name=test; JSESSIONID=97D98075F4F4AACE3E2DC7882671F9D5

HTTP/1.1 505 HTTP Version Not Supported
Server: Apache-Coyote/1.1
Date: Wed, 09 Nov 2011 09:28:23 GMT
Connection: close

<request><action>get_alert_log_list</action></request>


查了一下http协议,http1.1支持建议一个长连接,也支持一个请求先发包含有expect:100-continue的header,如果响应是100再继续发body。

感觉出现问题的地方是在这个tcp连接里先只发了一个不带expect:100-continue的header,响应直接是找不到body,紧接着发了另一个header,由于使用前一个请求的tcp连接可能导致格式上有问题于是直接505并要关闭该连接。再关闭前接收到之前某个请求的body,tcp连接结束。问题似乎有2个,一个是第一个只发header的请求缺少expect:100-continue,另一个是第二个请求由于和第一个请求共用了同一个tcp连接产生了格式上的问题无法解析。
搜了一下,也没人说ie8有上面的问题,我也觉得ie不太可能对http1.1支持的如此不好。暂时在容器的配置文件里加了maxKeepAliveRequests="1" ,关掉tcp长连接,目前没有再复现以上的问题。
有没有可能是这样,ie用同一个tcp连接发送多个http请求时,先发了一个请求的header,多线程并发在发body前又用该tcp连接发了另一个请求的header,然后才发第一个请求的body,结果就混乱了?
...全文

相关推荐

SpringBoot集成WebSocket长连接实际应用详解

主要介绍了SpringBoot集成WebSocket长连接实际应用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

weixin_38681147

httpwatch(IE9.IE8,IE6)

httpwatch (IE9.IE8,IE6) 适用(IE9.IE8,IE6) 测试过的

wfb0902

海康客户端IE插件

海康客户端IE插件 3.0.22.0 注意: 本插件视频服务端口为TCP 5050,请务必开启,否则接收不到图像。 页面引用OCX的代码: &lt;HTML&gt; &lt;Body&gt; 注意:服务端只有注册成为正式版后,IE插件客户端才可观看视频! &lt;/Body&gt; &lt;OBJECT classid="clsid:6F9A4C12-6897-40BE-8F35-CD27A51FC8C5" width=640 height=480 align=center hspace=0 vspace=0 &gt; &lt;!-- 视频服务器IP地址,支持域名解析,若为域名必须以www开头 --&gt; &lt;!-- 当前通道号(值0-64) --&gt; &lt;!-- 是否全屏(值0-1),1为全屏显示 --&gt; &lt;!-- 是否自动播放(值0-1),1为自动播放 --&gt; &lt;/OBJECT&gt; &lt;/HTML&gt; 测试时需要开通视频服务请联系QQ:366733082

fishday36

解决IE9地址栏输入网址时慢的问题

解决IE9地址栏输入网址时慢的问题,我试过了,解对有效

cc880301

让ie6也支持websocket采用flash封装实现

ie9都不支持websocket,何况ie6,往往这些不可思议的事情却意想不到的发生了;websocket能开发那么酷的功能,怎么能让ie拦住我们的脚步,用falsh封装吧,感兴趣的你可不要错过了哈

weixin_38606206
评论 3
收藏 已收藏
分享
返回顶部
crowgns
Ajax 52,778 成员 25,334 内容