当前位置:首页 > 开发 > 互联网 > 正文

SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3

发表于: 2015-03-10   作者:doccent   来源:转载   浏览次数:
摘要: 最近系统升级之后遇到了一个奇怪的问题,有时候做ajax提交的时候loading框一直显示着,不会消失,手工把框关了,再提交一次就正常了。在ie11下用开发人员工具调试,发现出这种现象的时候http请求很快就中止了,控制台会出现“SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3”。 开发和测试的时候都没遇到过这种现象,所以怀疑和升级环境里用的双机有关(开发测试用的都是

最近系统升级之后遇到了一个奇怪的问题,有时候做ajax提交的时候loading框一直显示着,不会消失,手工把框关了,再提交一次就正常了。在ie11下用开发人员工具调试,发现出这种现象的时候http请求很快就中止了,控制台会出现“SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3”。

开发和测试的时候都没遇到过这种现象,所以怀疑和升级环境里用的双机有关(开发测试用的都是单机,出问题的环境是双机,用LVS作的负载均衡)。于是就在升级环境做了一些测试发现不用LVS确实不会出问题,用了LVS哪怕双机只起一台都会出问题。于是请同事看了下vip没发现啥问题(因为好几个系统vip都是用的这个LVS,我这个系统也没有啥特殊配置);不知道怎么处理于是就用firfox再测测,发现用它正常。这下更迷惑了,到底是LVS的问题还是IE的问题?

一时无法确定,一度怀疑jquery form提交的问题,经测试排除。后来又找同事看LVS,写脚本定时看活动连接,发现出异常的时候从LVS看不到活动连接,于是怀疑请求就没有发给LVS,然后就在pc上抓包,发现出异常的时候有时候抓不到请求,可是有时候又能抓到,分析抓包的数据,排除了一些干扰(包重组、顺序不一致等),又复习了下tcp协议连接建立和关闭的过程(什么syn、ack、fin),发现是LVS把连接关了,又找同事来看,发现与LVS的一个参数tcptimeout有关。

这个参数是设置tcp连接的空闲时间的,超过这个时间的空闲连接会被关闭,设置的是30秒。由于http1.1默认使用的是tcp长连接,所以ie在下一次请求的时候会试图重用上一次的连接,由此当到30秒LVS将连接关闭而IE还不知道的时候,他去重用连接进行请求就会出错。而firfox为什么没有出错呢?抓包发现firfox会每隔10秒发送一个tcp keep alive的包(在win8.1下是这样;后来我在xp虚拟机上测试的fiefox不会发这个包,导致和ie一样会出异常)。

由于这个LVS是好多系统在用,我们也不能随便改参数,因此我们就在页面上用js每隔10秒发个请求,使LVS知道连接还在使用,不去把它关闭(这个解决办法在ie11+win8.1上完全ok,但是在xp虚拟机+ie8的环境下有时候还出异常,但是抓包看连接很正常,不知为何)。

另外查了一下,ie默认的连接空闲时间是60秒,超过60秒就会主动把连接关闭。所以如果把LVS的参数改的很小,或者改大超过60秒,应该都能解决这个问题。

SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
最近在使用jquery easyui datagrid 对页面布局,发现有时在IE下会接收不到数据并报错: SCRIPT7002:
前: 点击按钮后:读取除了Xml内的内容了. XMLHttpRequest包含一个小的QML例子来说明Qt QML's XMLHTTP
XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信。 最早,微软在IE 5引进了这
兴奋起来,花了一个下午时间把icehouse装好。建立网络时,提示错误: 检查compute节点的nova-networ
1.XMLHttpRequset对象创建   Internet Explorer把XMLHttpRequest实现为一个ActiveX对象,其他浏览
XMLHttpRequest makes sending HTTP requests very easy. You simply create an instance of the ob
XMLHttpRequest makes sending HTTP requests very easy. You simply create an instance of the ob
$http是AngularJS 中的一个核心服务,用于读取远程服务器的数据。 以下是存储在web服务器上的 JSON
$http是AngularJS 中的一个核心服务,用于读取远程服务器的数据。 以下是存储在web服务器上的 JSON
前言   web开发经常用到的一个技术就是无刷新提交表单,这个一般是利用ajax实现的,而ajax是利用X
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号