IE10/11 Ajax XHR 错误 - SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3

Posted

技术标签:

【中文标题】IE10/11 Ajax XHR 错误 - SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3【英文标题】:IE10/11 Ajax XHR error - SCRIPT7002: XMLHttpRequest: Network Error 0x2ef3 【发布时间】:2014-06-02 11:10:17 【问题描述】:

我已经解决这个问题几天了,并在这个论坛上联系,因为我觉得我已经用尽了我的选择。我有一个托管在 Drupal 7 网站上的表单,需要将表单值提交到外部 url。该表单通过 jQuery.AJAX 使用 HTTPS 协议上的 POST 请求

Form 在 Chrome、Firefox 和 Safari 中运行良好 我在 IE10+ 控制台中收到以下错误(使用 IE10+ 时,ajax 调用总是进入错误函数):

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

我尝试了以下方法:

添加内容类型:

// causes all of the jQuery callbacks to error out
"application/json; charset=utf-8",

在实际 POST 之前尝试 Ajax GET 调用(如另一个 SO 线程上的建议)

在请求中添加了header( 'Content-Type: application/json; charset=utf-8' );

设置crossDomain: true

已添加相应的 CORS 标头,并将表单代码粘贴在下方:

$.ajax(
    url: "[URL]", //the page to receive the form data  
    crossDomain: true,
    type: "POST",
    data: dataString, //posting to API 
    dataType: "json", //the data type the function should expect back from the server     
    success: function(data)          
        if (data.response_status == "1")  //error for at least 1 field
             //display error message 
             
             else  
             //display thank you label next to input
             

         else 
           //All form fields completed successfully! Redirect user to Thank you confirmation page            
         
     ,
    error: function(jqXHR, textStatus, errorThrown) 
             alert("there is an error!");
             console.log("in error section");
             console.log("jqXHR: " + jqXHR);
             console.log("jqXHR.responseText: " + jqXHR.responseText);
             console.log("textStatus: " + textStatus);
             console.log("errorThrown: " + errorThrown);
             data = $.parseJSON(jqXHR.responseText);
             console.log("parseJSON data: " + data);                           
            
    );         
  );
);

我读过 SCRIPT7002: XMLHttpRequest: Network Error 0x2ef3, Could not complete the operation due to error 00002ef3

任何指导都会有所帮助!谢谢

【问题讨论】:

感谢您的建议!我一直在使用 Live HTTP Headers 和 Firebug,但 Fiddler2 肯定更详细。真正有趣的是,如果我允许 Fiddler 解密 HTTPS 流量,一切正常!我得到了完整的请求和响应,包括预期的 CORS 标头和 JSON 数据。一旦我取消选中解密 HTTPS 或停止捕获流量 (F12) 的选项,我就会再次获得中止的连接。任何想法为什么使用 Fiddler 有效? html表单端的SSL证书是否有问题(它没有过期或任何东西)? 啊,我刚找到你的博文!需要通读所有不同的场景。感谢您为我指明正确的方向! blogs.telerik.com/fiddler/posts/13-02-28/… @EricLaw,我检查了 SSLLabs.com 并且证书在表单/应用服务器上都没有任何错误。还使用了 TLSv1.0(通过 Fiddler 和 SSLLabs 确认)、HTTP 1.1、Connection: Keep-Alive。所以我不确定为什么当我使用 Fiddler 时连接也没有中止......你遇到过类似的事情吗?再次感谢你 【参考方案1】:

OP 提供了一个 WireShark 捕获,显示服务器使用 HTTPS CertificateRequest 消息请求证书,然后客户端立即 FINd 连接。

将服务器配置为不请求客户端证书后,问题就消失了。

使用 Fiddler 也会使问题消失,因为除非您将其配置为这样做,否则 Fiddler 将永远不会从浏览器请求客户端证书。

我想知道是否只有受影响的客户端计算机具有匹配的证书和/或 CORS XHR 请求上的 withCredentials 标志在这种情况下是否相关。

【讨论】:

禁用服务器的 CertificateRequest 解决了 IE10/11 中的问题。谢谢! @EricLaw,你能详细说明一下这是怎么做到的吗? @Ron:“this”的意思是“禁用 CertificateRequest”?这取决于服务器;在 IIS8 中,它位于“SSL 设置 > 客户端证书”单选按钮下。 即使我的服务器没有在 HTTPS 模式下运行并且它没有请求浏览器证书,我也会收到此错误。 @ThePyroEagle:如果是这种情况,您可能应该打开一个新问题并附上您网站发送的确切内容的网络日志(或共享 URL)。【参考方案2】:

我在 IE 8+9+10+11 Ajax 调用中随机看到此错误。所有其他浏览器都没有问题。

假设 KeepAlive 连接之间存在竞争条件。我正在使用 Apache 2.4.7。

使用 /etc/apache2/apache2.conf 中的 Apache 2 默认设置,我能够重现每十次 Ajax 调用的错误:

KeepAlive On
KeepAliveTimeout 5

解决方案:任一设置

KeepAlive off

KeepAliveTimeout 1

为我解决了这个问题。我建议任何遇到 0x2ef3-Network 错误 的人先在服务器上设置 KeepAlive 关闭。如果错误消失,请再次打开它并使用 KeepAliveTimeout 的值进行测试。 They can also be set to ms.

There is also a way to disable KeepAlive only for Internet Explorer.

【讨论】:

0x2ef3-网络错误似乎是 HTTP 和 IE 的几个问题的保护伞。但其中之一肯定是 IE 生成的 POST Ajax 请求中的 2 个包的竞争条件。至少,关闭 Glassfish 或 IE 上的 KeepAlive 可以解决问题 我想指出这解决了我的问题。我正在使用 Magento 1.9.0.1 和 Apache。非常感谢! 此修复似乎解决了我们的一个网站 (woocommerce 2.2.8) 的问题。不过这是暂时的:最近的版本已经在代码中解决了这个问题,因此这是我们升级后的首选路线。【参考方案3】:

在我的环境中,我首先复制/粘贴了一些旧代码以供使用。所以“contentType”是"application/json"

当我发现 Windows 8 上的 IE11 很可能无法正常工作时,只要我使用鼠标单击提交按钮。 但我也发现如果我按下键盘上的回车键,那么它在 IE11 上就可以正常工作。

请注意,我的 input 元素和提交 button 嵌套在 form 元素中。

折腾了一阵子,我来到了这个页面,但没有解决我的问题,因为我对后端技术一无所知。我只是一个知识有限的前端人员。

然后我一一尝试了很多修改。突然间,jQuery 官方 API 文档启发了我。我注释掉了“contentType”参数,以便“contentType”采用默认值,即"application/x-www-form-urlencoded; charset=UTF-8"。那么问题就解决了。

希望这会有所帮助。

【讨论】:

谢谢!尝试了很多建议,我所要做的就是删除 contentType 参数... :) 这仅在您的服务不需要格式化对象时才有效(即 .NET WCF 服务默认需要格式化 JSON 或 XML)。【参考方案4】:

我也遇到过同样的问题。对我来说,这个问题似乎只在 IE11 中通过 Post 调用发生,我一直在使用 AngularJS 提供程序 $http 进行调用。看来这是IE中的一个错误,并且是证书问题。调用 POST 时未正确加载安全证书信息。作为一种解决方法,在进行 POST 调用之前,进行 GET 调用以正确加载证书。 看看下面的示例代码(它使用 AngularJS)

$http(
    method: "GET",
    url: "/api/DummyGet"
).success(
$http(
        method: "POST",
        url: "/api/PostCall",
        data: data
)
);

有关更多信息,您可以查看这两个链接 -http://jonnyreeves.co.uk/2013/making-xhr-request-to-https-domains-with-winjs/ -IE10/IE11 Abort Post Ajax Request After Clearing Cache with error "Network Error 0x2ef3"

【讨论】:

差不多 4 年后,这在 Angular6 中对我有用。在进行 POST 之前不要忘记等待 GET 请求完成 很高兴听到!【参考方案5】:

我有类似的情况,经过大量研究,问题是另一个问题,但我想在这里发布它,希望有人会发现它有助于寻找相同的错误:

Apache 的连接超时为 5 秒。 Win 7 上的 Internet Explorer 11 似乎忽略了不再有活动会话的事实,假设它是 60 秒。将 Apache 设置更改为 60 秒超时后,我的问题得到了解决。

【讨论】:

“没有活动会话了,假设是 60 秒”不清楚你所说的“活动会话”到底是什么意思。任何客户端或服务器都可以在空闲时关闭 HTTP 连接,如果连接关闭,浏览器将使用新连接。 IE的一个已知bug,IE由于某种原因不会创建新的连接【参考方案6】:

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

SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3

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

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

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

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

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

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

希望这对某人有所帮助!

【讨论】:

【参考方案7】:

嗯,我在 IE 11 上收到了同样的错误。试图尽可能简短地描述导致它的原因。

将网站显示为 http 网站对 https 进行 ajax 调用 ssl 是自签名的,但浏览器也不例外。 创建证书例外后,一切正常。

希望对某人有所帮助。

【讨论】:

非常感谢,这对我花费了数小时后的帮助:)【参考方案8】:

我在 ASP.NET MVC 中遇到了同样的错误,并且终于能够绕过它。我在页面中生成了几百个嵌入式表单,每个表单都有 @Html.AntiForgeryToken() 。我相信这会导致在客户端创建一个 cookie。可能 IE 的 cookie 空间不足(或其他东西,谁知道 IE)。删除它,我的问题就消失了。

【讨论】:

【参考方案9】:

我们在 IE11 和 Edge 中看到了同样的错误。一个 jQuery AJAX 请求在 300 秒后持续抛出错误 XMLHttpRequest: Network Error 0x2ef3, Could not complete the operation due to error 00002ef3.。 (Chrome 和 Firefox 都很好)

原来是我们的负载均衡器(在我们的例子中是 F5)上的 空闲超时 设置。我们设法使用 Fiddler 诊断出问题,这导致浏览器中出现更有用的错误消息:Failed to load resource: the server responded with a status of 504 (Fiddler - Receive Failure) 请注意,在 Fiddler 运行时,我们在所有浏览器(包括 Chrome 和 Firefox)中都看到了此错误(300 秒后)。

【讨论】:

F5 的超时时间你改了吗? 我们也使用 F5 作为我们的负载均衡器。我们在向 Web 应用程序发布简单的 /refresh 时遇到此错误。我无法在本地主机上重现该错误。但我可以在我们使用 F5 的其他环境中。它只发生在 IE11 中。你最后将空闲超时值设置为什么? --谢谢。【参考方案10】:

只是想谈谈我对这个问题的根本原因的看法。

我们有一个 Angular2 应用程序,它调用我们的 NodeJS REST api。然后其余 API 调用另一个服务(我相信是 SOAP)。

我们发现我们的 SOAP 服务仅在一个环境中没有端点(?)(在其他任何地方都可以使用)。当 NodeJS api 调用 SOAP 服务时,soap 服务返回一个错误,说“X 不是函数”。当错误响应返回给 NodeJS 时,它没有适当的错误/异常处理,所以它完全杀死了服务。因此,UI 没有得到响应。

【讨论】:

以上是关于IE10/11 Ajax XHR 错误 - SCRIPT7002:XMLHttpRequest:网络错误 0x2ef3的主要内容,如果未能解决你的问题,请参考以下文章

IE8 中的 xhr.status 为 8 是啥意思?

AJAX之XHR

ajax

学习Ajax

ajax请求本地md以及简单封装xhr ajax请求

ajax整理,送给小伙伴