间歇性“错误:无法在'XMLHttpRequest'上执行'发送'”

时间:2017-06-26 17:51:18

标签: javascript jquery ajax xmlhttprequest synchronous

转向stackoverflow专家,因为我需要一些帮助来理解为什么会间歇性地发生这种情况,以及是否有办法确定根本原因。

TL; DR 我通过对端点的同步jQuery ajax调用看到NetworkError请求的间歇性(约1%的请求)代码19 GET排除了根本原因)并且似乎只有在Chrome / Firefox中加载时才会发生。我试图理解为什么会发生这种情况,看看我能做些什么来确认原因或随意重现问题。

$.ajax({
    async: false,
    type: 'GET',
    url: 'http://differentdomain.com/api',
    data: null,
    dataType: 'text',
    error: function (request, status, error) {
        # This was added for troubleshooting
        $.ajax({
            type: "post",
            url: "https://requestb.in/removed",
            data: {status, error},
            success: function (data) {
                console.log("success");
            }
        });
    }
});

基本事实

不幸的是,我们的开发人员和我们的客户自己并不能完全重现这个问题。客户客户使用的代码只是将问题报告给控制台。我们正在捕获控制台中报告的错误,这就是我们知道它发生的原因。

我们还使用了第三方测试服务,该服务使用WebDriver自动化使用浏览器进行测试。他们的框架报告了一个Socket closed错误,但我认为这是他们报告的自定义错误,请求实际上从未发送过。

  

真正的网络错误或端点问题?

最初,我认为这确实是由于某种网络问题导致不同的域名网站,但已经排除了这一点。我运行了一个python脚本,在三个不同的区域向该端点发出大约20K次请求。在几天内完成大约200K的总呼叫后,他们将全部(按预期)返回200状态。这个端点也是一个非常可靠的CDN的背后,所以我非常怀疑CDN间歇性地失败了。这似乎也证实只有在浏览器中加载时才会发生这种情况(特别是Chrome / Firefox)。

稍后添加了错误功能,以便我可以让客户端报告错误到requestb.in进行检查,这里是报告的相关数据,这不是太多:

error[name]: NetworkError
status: error
error[code]: 19
error[message]: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://differentdomain.com/api'.

这是我可以提取的尽可能多的信息,所以如果有人有任何关于从这个错误中获取更多数据的建议,这也会非常有用。

搜索StackOverflow后,看起来当其他人报告此问题时,它与以下一项或两项有关:

  

跨源资源共享

http://differentdomain.com/api端点确实返回Access-Control-Allow-Origin: *,我相信这就是所有需要的,因为这是一个简单的CORS而不是预先通过。事实上,除非我向AJAX请求添加自定义标头,否则我看不到发送OPTION请求。此处Access-Control-Allow-Method端点需要/api标头吗?

  

同步AJAX

我明白使用同步AJAX是不好的做法,并且如果这是根本原因会完全接受它,但如果是,我怎么能去理解失败的情况呢?有什么我可以找到来确认这是问题吗?

  

某种阻止扩展

如果我在Chrome上使用adblock屏蔽differentdomain.com/api,我可以重现报告此错误。但我们可以使用我们用于测试我们的应用程序的自动Chrome实例来重现此错误,该应用程序不会运行任何扩展程序。

如果您能提供任何建议,请提前感谢您!

0 个答案:

没有答案