XMLHttpRequest()&net :: ERR_NAME_NOT_RESOLVED

ric*_*ver 8 javascript dns xmlhttprequest

我正在编写一个javascript应用程序,它发出远程服务器的HTTP请求.用户将输入主机名.

如果他们输入无法解析的DNS名称,我想提供诊断消息.这是当前的代码:

var req, t, url;
url = 'http://definitelydoesntexist0x314159.com';
req = new XMLHttpRequest();
req.open('GET', url, true);
req.onreadystatechange = function() {
  if (req.readyState == 4) {
    t = req.statusText;
  }
};
req.send();
Run Code Online (Sandbox Code Playgroud)

在onreadystatechange函数中,req的状态为= 0,响应为"",因此没有太多迹象表明出现了什么问题.然而,控制台显示"无法加载资源:net :: ERR_NAME_NOT_RESOLVED",因此浏览器(Chrome)能够弄清楚发生了什么.

如何获得ERR_NAME_NOT_RESOLVED的指示?

更新:我回到这个问题,使用的策略是任何不是'超时'的响应意味着名称已解决,主机回答等.

我原来问题的答案似乎是:浏览器本身(在这种情况下是Chrome)检测到无法解析并在控制台中显示它,但XMLHttpRequest API不够丰富,无法指明原因.因此,可怜的Javascript程序员会将超时作为一种解决方法.

我还删除了CORS标题,因为正确指出的评论者之一没有价值.

ric*_*ver 6

经过大量的研究,我更清楚地理解问题,并理解答案(不,不可能得到原因 - 例如,ERR_NAME_NOT_RESOLVED - 处于错误状态).

这是设计的.Javascript错误处理例程不会,也不能返回有关失败原因的更多信息.浏览器这样做是为了防止恶意Javascript代码在本地网络上运行端口扫描程序并将该信息发送到远程服务器.

我的关于Chromium bug报告的报告以及其中一位开发人员的回复非常明确地证实了这一点:https://bugs.chromium.org/p/chromium/issues/detail?id = 718447特别评论#2 .

因此,窗口中的javascript在沙箱中运行,只能访问加载,超时,中止和错误状态,而无需任何进一步的粒度.(但是,浏览器的调试环境可以显示此信息,因此您可以找出问题所在......)