XMLHttpRequest() & net::ERR_NAME_NOT_RESOLVED
XMLHttpRequest() & net::ERR_NAME_NOT_RESOLVED
我正在编写一个 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();
在 onreadystatechange 函数中,req 的 status=0,response 是“”,所以没有太多迹象表明出了什么问题。然而控制台显示 "Failed to load resource: net::ERR_NAME_NOT_RESOLVED" 所以浏览器 (Chrome) 能够弄清楚发生了什么。
如何获得 ERR_NAME_NOT_RESOLVED 的指示?
更新: 我已经回到这个问题,使用的策略是任何不是 'timeout' 的响应都意味着名称已解析,主机回答,等等
我原来的问题的答案似乎是:浏览器本身(Chrome,在这种情况下)检测到解析失败并将其显示在控制台中,但是 XMLHttpRequest API 不够丰富,无法指出原因。因此,可怜的 Javascript 程序员不得不将超时作为解决方法。
我还删除了 CORS header,因为其中一位评论者正确指出它没有价值。
经过大量的研究,我更清楚地理解了问题,也理解了答案(不,不可能在错误状态中找到原因 - 例如,ERR_NAME_NOT_RESOLVED)。
这是 设计的。 Javascript 错误处理例程不会,也不能 return 有关失败原因的更多信息。浏览器这样做是为了防止来自本地网络 运行 端口扫描器的恶意 Javascript 代码并将该信息发送到远程服务器。
我关于 Chromium bug 报告器的报告和一位开发人员的回复清楚地证实了这一点,网址为:https://bugs.chromium.org/p/chromium/issues/detail?id=718447 尤其是评论 #2。
因此,window 中的 javascript 在沙箱中运行,只能访问
加载、超时、中止和错误状态,没有任何进一步的粒度。 (虽然浏览器的调试环境,可以显示这个信息,所以你可以找出问题所在...)
今天早上我在本地计算机上尝试访问服务器 运行 时遇到了这个问题,我可以通过执行以下操作解决它。
- 将您的请求 URL 更改为
http://127.0.0.1:3000
- 使用新请求进行网络请求URL
- 切换回
http://localhost:3000
- 再次发起网络请求,它应该可以工作
我认为它通过强制它直接使用 IP 地址清除了一些缓存。希望它适用于遇到此问题的其他人。
我正在编写一个 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();
在 onreadystatechange 函数中,req 的 status=0,response 是“”,所以没有太多迹象表明出了什么问题。然而控制台显示 "Failed to load resource: net::ERR_NAME_NOT_RESOLVED" 所以浏览器 (Chrome) 能够弄清楚发生了什么。
如何获得 ERR_NAME_NOT_RESOLVED 的指示?
更新: 我已经回到这个问题,使用的策略是任何不是 'timeout' 的响应都意味着名称已解析,主机回答,等等
我原来的问题的答案似乎是:浏览器本身(Chrome,在这种情况下)检测到解析失败并将其显示在控制台中,但是 XMLHttpRequest API 不够丰富,无法指出原因。因此,可怜的 Javascript 程序员不得不将超时作为解决方法。
我还删除了 CORS header,因为其中一位评论者正确指出它没有价值。
经过大量的研究,我更清楚地理解了问题,也理解了答案(不,不可能在错误状态中找到原因 - 例如,ERR_NAME_NOT_RESOLVED)。
这是 设计的。 Javascript 错误处理例程不会,也不能 return 有关失败原因的更多信息。浏览器这样做是为了防止来自本地网络 运行 端口扫描器的恶意 Javascript 代码并将该信息发送到远程服务器。
我关于 Chromium bug 报告器的报告和一位开发人员的回复清楚地证实了这一点,网址为:https://bugs.chromium.org/p/chromium/issues/detail?id=718447 尤其是评论 #2。
因此,window 中的 javascript 在沙箱中运行,只能访问 加载、超时、中止和错误状态,没有任何进一步的粒度。 (虽然浏览器的调试环境,可以显示这个信息,所以你可以找出问题所在...)
今天早上我在本地计算机上尝试访问服务器 运行 时遇到了这个问题,我可以通过执行以下操作解决它。
- 将您的请求 URL 更改为
http://127.0.0.1:3000
- 使用新请求进行网络请求URL
- 切换回
http://localhost:3000
- 再次发起网络请求,它应该可以工作
我认为它通过强制它直接使用 IP 地址清除了一些缓存。希望它适用于遇到此问题的其他人。