node.js - NodeJS 的“https”库是否支持 DNS 故障转移?
问题描述
假设我正在向 DNS 记录包含多个 IP 地址的主机发出 HTTP GET 请求,例如twitter.com
:
twitter.com. 45 IN A 104.244.42.1
twitter.com. 45 IN A 104.244.42.65
让我们假设由于某些原因(例如传出连接在防火墙上被阻止),此 IP 地址之一不可用。
https.get()
是从 DNS 查询结果中尝试所有这些 IP 地址还是只尝试其中一个?
var https = require('https');
https.get('https://www.twitter.com', function(res) { ... }
我已经执行了一个阻止这些地址之一的示例测试,当第一个尝试的 IP 地址不可用时,它似乎不会对另一个 IP 地址执行重试。但由于缺乏调试日志,我不是 100% 有信心。有人可以根据库的源代码或官方文档来确认或反驳这个假设吗?
]$ dig twitter.com
...
;; ANSWER SECTION:
twitter.com. 60 IN A 104.244.42.1
twitter.com. 60 IN A 104.244.42.193
104.244.42.193
在防火墙中被阻止
]$ node failovertest.js
Error: connect ETIMEDOUT 104.244.42.193:443
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1137:16) {
errno: -110,
code: 'ETIMEDOUT',
syscall: 'connect',
address: '104.244.42.193',
port: 443
}
解决方案
推荐阅读
- node.js - Docker 上的 Adonis ace 迁移 - SyntaxError: Unexpected identifier
- flutter - Flutter:如何从 TextFields 的 ListView.builder 中保存用户的输入
- c++ - 0的2D数组破坏无关循环的逻辑 - C++
- sql - 基于同一列更新
- java - 改造响应在 Android Studio 中返回 null
- javascript - 需要降价文件时,Webpack raw-loader 出错
- c# - 为什么我的 api 控制器中出现此 LINQ 错误?
- apollo - 在 Apollo 中处理未经身份验证的响应
- php - 将付款意图存储在 Stripe php 上后,如何检索其净值
- node.js - 如何在 NodeJS 14 中快速将 128 位值加密为另一个等长值