最近系统升级之后遇到了一个奇怪的问题,有时候做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秒,应该都能解决这个问题。
相关推荐
2. **Ajax 实现对象:XMLHttpRequest** XMLHttpRequest(XHR)是实现AJAX的核心对象,它允许JavaScript与服务器进行异步通信。通过XHR对象,开发者可以发送GET、POST以及其他HTTP请求,并接收服务器返回的数据。 ...
### XMLHTTPRequest:实现异步网页更新的关键技术 #### 引言 XMLHTTPRequest是现代Web开发中的一个关键组件,它使得JavaScript能够与服务器进行异步通信,无需重新加载整个页面即可获取或发送数据。这一特性极大地...
AWS Clojurescript Gradle模板该项目使用将Clojurescript编译为模块。NodeJS支持提供了对加载/使用NodeJS模块的基本支持。 请参见为例。 包括依赖的NodeJS,修改和模块添加到closurescript .. npmDeps部分。...
资源摘要信息 :"XMLHttpRequest实现机制" XMLHttpRequest是Web API的一种,允许在Web页面中异步地从服务器获取数据,从而实现了实时更新页面内容的功能。在本文中,我们将详细介绍XMLHttpRequest的实现机制,并探讨...
XMLHttpRequest(XHR)是Web开发中的一个关键技术,它允许JavaScript在不刷新整个页面的情况下与服务器进行异步数据交换。这个技术对于实现动态网页和Ajax(Asynchronous JavaScript and XML)应用至关重要。...
XMLHttpRequest(XHR)是Web开发中的一个关键技术,它允许JavaScript在不刷新整个页面的情况下与服务器进行异步数据交换,这就是我们常说的AJAX(Asynchronous JavaScript and XML)。这个技术极大地提升了用户体验...
被请求者XMLHttpRequest + FormData 包装器,可轻松嵌入 AJAX。应用程序接口新的创建一个新的 Requeste 实例。 new Requeste ( string method , string uri ) ; 例子: var req = new Requeste ( 'GET' , '...
**readyState属性**:表示XMLHttpRequest对象的当前状态,从“未初始化”到“已加载”,共五个阶段,分别是0(未初始化)、1(打开)、2(发送)、3(接收中)、4(完成)。这些状态的变化是异步操作的关键,开发者...
法贾克斯XMLHttpRequest的一个小包装。浏览器支持已在以下浏览器中进行了测试: Chrome v。23 Firefox第17版Opera v.12.11 Safari v。6 IE版本9 IE v。8 它需要与ES6兼容的Promise实现。 您可以使用es6-shim或es6-...
5. **HTTP/2支持**:现代浏览器中的XMLHttpRequest也支持HTTP/2协议,提供更高效的网络传输。 ### 四、Promise化使用 为了更好地管理和组织异步代码,可以使用Promise来封装XMLHttpRequest,例如使用`fetch` API...
XMLHttpRequest Level 2 是对原始 XMLHttpRequest 接口的重大升级,旨在提供更强大的功能,以适应互联网的快速发展。这个新版本的出现,旨在解决旧版本的一些局限性,促进Web应用程序的创新。 在老版本的 ...
#### XMLHttpRequest对象的原生 JavaScript 包装器。 使用示例 var xhr = new XHR ( { method : 'post' , url : '<example>' , async : true , serialize : true , data : document . forms [ 0 ] , ...
在发起 AJAX 请求时,应该考虑到可能发生的网络错误或其他异常情况。可以通过监听 `error` 事件或检查 `status` 属性来进行错误处理。 #### 八、总结 `window.XMLHttpRequest` 为网页提供了强大的异步数据交换能力...
### Ajax之XMLHttpRequest详解 #### 一、引言 随着互联网技术的发展,用户对Web应用的体验要求越来越高。传统的Web应用程序通常采用请求/响应模型,这意味着每次用户与页面交互(例如点击按钮)都会触发一个新的...
XMLHttpRequest(XHR)是Web开发中的一个关键技术,它允许JavaScript在不刷新整个页面的情况下与服务器进行异步数据交换,这就是我们常说的AJAX(Asynchronous JavaScript and XML)。这个技术极大地提升了用户体验...
包括使用XMLHttpRequest Level 2的新特性,如Blob、ArrayBuffer和TextTrack等,以及利用Promise和fetch API来替代XMLHttpRequest。 第十一章:兼容性和最佳实践 了解不同浏览器对XMLHttpRequest的支持情况,遵循...
也欢迎出现印刷和语法错误的请求请求。 我们很乐意指导您完成此过程。 如果您有兴趣并且需要入门帮助,请对该问题发表评论或提问。 拉取要求 简而言之,请更改xhr.bs并提交一个带有补丁。 如果您是这里的新手,请...
在源网页加载之前,实现一个XMLHttpRequest的代理对象,然后覆盖全局的XMLHttpRequest,这样一但上层调用 new XMLHttpRequest这样的代码时,其实创建的是Ajax-hook的代理对象实例
XMLHttpRequest-HTTP-XMLHttpRequest实现HTTP协议下文件上传断点续传 upload.php filesize.phphttpu.html:主要是上传页面的效果,参考了 博主没有php 处理和获取已经上传文件大小的代码对这些页面css js不是太熟 就...