IE11 HTTPS AJAX XMLHttpRequest:网络错误 0x2eff,由于错误 00002eff 无法完成操作

Posted

技术标签:

【中文标题】IE11 HTTPS AJAX XMLHttpRequest:网络错误 0x2eff,由于错误 00002eff 无法完成操作【英文标题】:IE11 HTTPS AJAX XMLHttpRequest: Network Error 0x2eff, Could not complete the operation due to error 00002eff 【发布时间】:2016-03-07 02:40:59 【问题描述】:

我有一个 ajax POST 请求,可能需要 2 秒到 30 多分钟之间的任何时间。发布请求是由于单击按钮而发生的

如果请求不到一两分钟,它就会返回响应,一切正常。但是,如果请求花费的时间超过两分钟,则会返回“网络错误:XMLHttpRequest:网络错误 0x2eff,由于错误 00002eff 无法完成操作”。

当然,它在 Firefox 和 Chrome 中运行良好。

应用程序部署在启用 SSL 的 JBoss 服务器上。这里的架构是我们有一个负载均衡器,将请求路由到两个 Jboss 服务器。

Internet Explorer

版本:11.0.9600.180971C 更新:11.0.25

我尝试了以下方法,但没有成功

1) ajax 将缓存设置为 false - 不起作用 2) 根据https://support.microsoft.com/en-us/kb/813827 更改了注册表设置 - 不起作用,这是令人困惑的地方,这表明它不是 IE 的东西,但同时它适用于 chrome 和 ff,所以它也不是服务器的东西 3) 将 ajax 超时设置为 0 - 无效 4) 在 $('#mdlSgn').click(function() 根据jQuery Ajax requests are getting cancelled without being sent

之后添加了 e.preventDefault
$('#mdlSgn').click(function() 
    $('#cnfdsgl').modal('hide');

     $.ajax(
        url: ajaxUrl,
        type: "POST",
        data: JSON.stringify(input),
        contentType: "application/json; charset=UTF-8",
        dataType: "json",
        success: function(data) 
             /// some logic


        ,
        error : function(jqXhr, textStatus, errorThrown) 
            /// some logic
        
    );

 //some other logic
); 

【问题讨论】:

是的,我知道这需要 30 分钟,用户对此很满意,他们希望在那之后看到成功响应 你有一些了解用户。如果是我,我会让服务器立即响应,将任务放入工作队列,然后在事情完成并且结果可用时通知。 嗯,这是一种方法,但问题是它之前运行良好,我想知道为什么 IE 会出现这种行为的根本原因? 为什么不将处理作为原始请求的一部分(异步调用处理并立即返回),而是进行某种状态/状态请求,您可以定期调用检查处理是否完成? 【参考方案1】:

我们花了几天时间寻找这个问题的原因!

在控制台中:SCRIPT7002: XMLHttpRequest: Network Error 0x2eff, 由于错误 00002eff,无法完成操作。 在 IE/Edge 的网络选项卡中,我们看到失败的请求为 'Pending...' XmlHTTPRequest/JQuery 在客户端返回 404 错误,但服务器返回成功的 200 响应。 没有返回响应头

我们只在使用所有这些时遇到了这个问题:

HTTP/2 POST 请求 Windows 10 IE 或 Edge

显然,这是 HTTP 堆栈中的 Windows 10 错误,现已在 Windows 10 版本 1803(2018 年 4 月)中解决。 因此,对于使用 Windows 自动更新的人员/公司,这个问题通常会随着时间的推移而消失。 used Windows 10 versions WorldWide

我们在较旧和较新版本的 Windows 10 上对此进行了测试,确实已解决。

一些临时解决方案可能是:

为 IE 和 Edge 禁用 HTTP/2 并使用 HTTPS(服务器端更改)。 使用 GET(如果可能) PUT 也有这个问题吗? 如果没有返回响应头,请重试 接受 IE/Edge 用户将受到惩罚 ;-)

【讨论】:

感谢您分享这个! 这里我有一个应用程序,必须在 IE 中得到支持。 实际上我对此有一个疑问——我目前使用的是 Windows 7,而不是 10,版本 6.1.7601——Win 7 中是否也存在这个问题?跨度> 【参考方案2】:

在我的情况下,它是从服务器返回的自定义响应代码 (3020)。将其切换到200并修改SPA客户端逻辑,这样就解决了问题。

【讨论】:

【参考方案3】:

可能需要 2 秒到 30 多分钟之间的任何时间

我认为这是因为要传输大量数据。

我正在创建大型文件上传器,它可以处理 20GB 以上的视频文件,可能会持续几个小时。

根据我的经验 - 使用单个 ajax 请求上传大数据可能会导致奇怪的浏览器崩溃(例如,我的 Chrome 浏览器在大约 20% 的上传测试中崩溃)。

我发现最可靠的方法是将数据拆分为 1MB 的块,然后通过单独的 ajax 请求将它们顺序发送到服务器。

【讨论】:

如果你需要,我可以描述详细的例子。 感谢 Amber 的回答,但这不是文件上传,而是后端过程需要花费很多时间...... @user1707141 我找到了您提到的错误代码的解决方法,尝试一下:“打开 Internet 选项,选择高级选项卡,然后单击“恢复高级设置”按钮。之后 Ajax 请求工作正常。” 我们公司的 IE 设置是由系统管理员决定的,因此我在这方面没有太大的灵活性.. 能否提供大文件上传的代码?对于使用 jquery.filedrop.js 和 mvc 进行拖放上传的控件,我面临同样的问题

以上是关于IE11 HTTPS AJAX XMLHttpRequest:网络错误 0x2eff,由于错误 00002eff 无法完成操作的主要内容,如果未能解决你的问题,请参考以下文章

纯JavaScript实现异步Ajax的基本原理

IE11 HTTPS AJAX XMLHttpRequest:网络错误 0x2eff,由于错误 00002eff 无法完成操作

当ajax目标是localhost时,IE 10和11中的访问被拒绝

AJAX异步

IE 中的 HTTPS Ajax 请求问题(非跨域)

Ajax POST 在 IE11 中不起作用