最近系统升级之后遇到了一个奇怪的问题,有时候做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秒,应该都能解决这个问题。
相关推荐
Ajax 实现对象:XMLHttpRequest2.1 xhr 建立 Ajax 流程2.2 xhr 属性、句柄、方法3. Ajax 异步 GET/POST 请求3.1 Ajax GET 请求3.2 Ajax POST 请求 1. Ajax 异步请求 说明 AJAX, Asynchronous Javascript And XML,...
XMLHTTPRequest简介
AWS Clojurescript Gradle模板该项目使用将Clojurescript编译为模块。NodeJS支持提供了对加载/使用NodeJS模块的基本支持。 请参见为例。 包括依赖的NodeJS,修改和模块添加到closurescript .. npmDeps部分。...
第三步:配置基础的请求信息 第三步:配置基础的请求信息 第四步:发起请求 第四步:发起请求
XMLHttpRequest_test 这是XMLHttpRequest的学习代码。
法贾克斯XMLHttpRequest的一个小包装。浏览器支持已在以下浏览器中进行了测试: Chrome v。23 Firefox第17版Opera v.12.11 Safari v。6 IE版本9 IE v。8 它需要与ES6兼容的Promise实现。 您可以使用es6-shim或es6-...
#### XMLHttpRequest对象的原生 JavaScript 包装器。 使用示例 var xhr = new XHR ( { method : 'post' , url : '<example>' , async : true , serialize : true , data : document . forms [ 0 ] , ...
在源网页加载之前,实现一个XMLHttpRequest的代理对象,然后覆盖全局的XMLHttpRequest,这样一但上层调用 new XMLHttpRequest这样的代码时,其实创建的是Ajax-hook的代理对象实例
也欢迎出现印刷和语法错误的请求请求。 我们很乐意指导您完成此过程。 如果您有兴趣并且需要入门帮助,请对该问题发表评论或提问。 拉取要求 简而言之,请更改xhr.bs并提交一个带有补丁。 如果您是这里的新手,请...
XMLHttpRequest-HTTP-XMLHttpRequest实现HTTP协议下文件上传断点续传 upload.php filesize.phphttpu.html:主要是上传页面的效果,参考了 博主没有php 处理和获取已经上传文件大小的代码对这些页面css js不是太熟 就...
被请求者XMLHttpRequest + FormData 包装器,可轻松嵌入 AJAX。应用程序接口新的创建一个新的 Requeste 实例。 new Requeste ( string method , string uri ) ; 例子: var req = new Requeste ( 'GET' , '...
1.js对象 XMLHttpRequest 属性: 1.readyState属性 readyState:只读属性。 作用:通过读取该属性,从而知道XMLHttpRequest 目前进行到了哪一步 取值: 状态码 名称 描述 0 未初始化 默认状态,...
表格邮件 XMLHttpRequest和JSON的极端原始用法示例
西里尔·佩雷拉 原型 JavaScript 框架,版本 1.5.0 (c) by Sam Stephenson Funkychat 以知识共享许可发布 EN FR PT ... 您可以在线与人聊天, 表情符号允许使用快捷键,如“:)” 不使用标签直接转换url ...
XmlHttpRequest详解XmlHttpRequest详解XmlHttpRequest详解
需要重点说明的是,XMLHttpRequest并不是一个W3C标准,不过许多功能已经涵盖在一个新提案中:DOM Level 3加载和保存规约(DOM Level 3 Lo Asp.net Ajax UpdatePanel.Triggers 属性 属性值 类型:System.Web.UI..::...
JS中基于XMLHttpRequest的Get 请求demo,包含2请求方式的源代码,可直接用于项目开发。
基于XMLHttpRequest的网络请求,使用typescript重构,并使用的demo与模块的单元测试 肯阿西奥斯 采用Promise API 请求和响应配置化 支持请求和响应数据自定义拦截器 支持外部取消请求 支持跨域请求携带cookie 支持...
XMLHttpRequest 提提提户端端http服务器器讯的协协 Example 下面的代码是在 JScript中创建一个 XmlhTtp对象并从服务器请求一个 XML文档。服务器返回XML文档并显示 var xmlHttpReq = new ActiveXObject("MSXML2....
压缩包“ajax.rar”内含:“《掌握Ajax.chm》”和“《XMLHttpRequest手册.chm》”。 1、《掌握Ajax.chm》包含下列内容: 掌握 Ajax,第 1 部分: Ajax 入门简介 ... 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax ...