转向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实例来重现此错误,该应用程序不会运行任何扩展程序。
如果您能提供任何建议,请提前感谢您!