清除缓存后 IE10/IE11 Abort Post Ajax 请求出现错误“网络错误 0x2ef3”

Posted

技术标签:

【中文标题】清除缓存后 IE10/IE11 Abort Post Ajax 请求出现错误“网络错误 0x2ef3”【英文标题】:IE10/IE11 Abort Post Ajax Request After Clearing Cache with error "Network Error 0x2ef3" 【发布时间】:2013-04-25 03:26:32 【问题描述】:

SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3,无法完成 由于错误 00002ef3 导致的操作

目前没有有效的解决方案。

更新:在 IE11 上也注意到了。

经过越来越多的调查,我得出了这个结果:

    这个问题是我的应用程序特有的,它不会发生在 facebook 上。 这个问题与每个主机的最大请求数无关(我做了淹没服务器的示例页面,IE10 能够同时处理多达 8-10 个请求,在我的应用程序中我也尝试过这样做ajax 请求串行,它也失败了)。 问题是 POST 请求特有的。 问题不是特定于所使用的 JS 库(我尝试从控制台直接 XMLHttpRequest 也失败了)。 在触发 xhr.send()、xhr.readyState = 4 和 xhr.onreadystatechange 后发生故障。 失败与任何内容类型、正确的请求或服务器配置无关。它只是客户端,请求虚拟页面会失败,只有最低 XHR,只有 xhr.open 和 xhr.send。 主要发生在清除浏览器缓存后。 在 POST 之前执行 GET 请求并不能解决此问题。

我的问题是:

    浏览器缓存如何影响 POST ajax 请求? 是否有任何机构与 IE 开发人员联系,告诉我们此错误“网络错误 0x2ef3”映射到什么?

目前我正在做的临时解决方案是,如果 HTTP 状态代码为零,则最多重试 3 次。但这很丑陋,因为有时甚至上传请求都会失败,并且对于那些有重试的请求会变得很慢,有时会花费额外的100ms。

重现步骤:

    确保 fiddler 或代理已禁用。 http://ie10.laiths.name/#!login 打开 IE10 控制台,删除浏览器缓存。 试试这个无效的登录:random@rand.com/random 3-4 次(清除缓存/无效登录)后,您将看到此错误:SCRIPT7002: XMLHttpRequest: Network Error 0x2ef3, 由于错误 00002ef3 无法完成操作。

我的 IE 版本:

Win7 IE10版本:10.0.9200.16618 更新版本:10.0.6 (KB2838727)

现在,如果browser is IE10 && Request is POST && HTTP status code is 0,我最多重试 3 次来解决它。

如果有人可以帮助我删除我丑陋的解决方案,我将不胜感激,因为使用这样的解决方案,即使请求发送到服务器并返回 0,我也会重试(我试图通过测量之间的时间来避免这种情况xhr.send 及其回调,但它不可靠),如果 IE10 在 comptMode 下怎么办,如果 IE11 有同样的问题怎么办,增加性能,每次重试之间在我的机器上大约需要 170 毫秒。

【问题讨论】:

我无法在 IE10 中重现此内容。尝试了大约 10 次。 我正在添加自动重试,您是否尝试在每次尝试之前清除缓存?你在使用开发者工具栏删除缓存按钮吗? 是的,每次尝试后我都通过单击缓存(在开发人员工具中)-> 清除浏览器缓存... 清除了缓存 现在我再次尝试,它发生在我身上。我正在使用 Win7 IE10 版本:10.0.9200.16618,更新版本:10.0.6 (KB2838727)。我关闭了我的提琴手或任何其他代理(出于某种原因,像提琴手这样的代理不会发生)。打开IE启动网络捕获,尝试invalid-login-clear-cache,2次后出现问题。 只是好奇,这是在 Vista 上吗? 【参考方案1】:

这可能是由于安全证书问题而发生的。如果您清除缓存,您会丢失部分(如果不是全部)证书信息。

您可以在http://www.jonnyreeves.co.uk/2013/making-xhr-request-to-https-domains-with-winjs/ 中找到更多信息(和解决方法)

基本上它说您必须在您的 POST 请求之前执行 GET 才能更新证书信息。

【讨论】:

谢谢,其实我之前也看到过这个网址,但我不相信这个想法,但我会尝试一下。顺便说一句,我 使用 HTTPS 你用的是什么服务器? 我使用的是 Apache,但它是纯粹的客户端,请求没有通过网络,甚至没有超出浏览器本身。 我不使用 HTTPS,我的域是 HTTP,我没有看到 Facebook 在 IE10 上执行这样的双重请求(GET 然后 POST),尽管他们使用的是 HTTPS 我目前在使用新的 Edge 浏览器时遇到了这个问题。在您事先执行 HEAD/GET 请求之前,AJAX POST 跨域调用不起作用。两个域都通过 HTTPS 连接。 IE 11 工作正常。这是一个错误吗?【参考方案2】:

我遇到了这个问题,返回一些 JSON 的 AJAX Post 请求会失败,最终返回 abort,并显示:

SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3

控制台出错。在其他浏览器(Chrome、Firefox、Safari)上,完全相同的 AJAX 请求就可以了。

进一步调查显示响应缺少状态代码 - 在这种情况下,它应该是 500 内部错误。

这是作为 C# Web 应用程序的一部分生成的,该应用程序使用需要显式设置错误代码的服务堆栈。

IE 似乎让连接保持打开状态,最终网络层将其关闭并“中止”请求;尽管收到内容和其他标题。

更新 Web 应用程序以正确返回状态代码解决了该问题。

也许 IE 如何处理帖子中的标题存在问题。

希望这对某人有所帮助!

【讨论】:

你有解决方案吗? 修复来自 Web 应用程序的响应修复了它。

以上是关于清除缓存后 IE10/IE11 Abort Post Ajax 请求出现错误“网络错误 0x2ef3”的主要内容,如果未能解决你的问题,请参考以下文章

卸载IE9,IE10,IE11

如何从开发者工具中清除 IE10 和 IE11 中的 localStorage?

让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法

css CSS目标IE9,IE10,IE11

让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法

让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法