在node.js 4.x中,函数http.request
the docs说
选项
- 系列:解析主机和主机名时使用的IP地址系列。有效值为4或6. 未指定时,将使用IP v4和v6。
当未指定family
时,node.js会选择ipv6或ipv4的逻辑是什么?
据我所知,当我没有指定它时,它默认为或更喜欢ipv4而浏览器,至少是chrome,更喜欢ipv6
有没有办法让node.js在可用时选择ipv6,或者我是否需要手动操作?
如果我是手动做什么应该做什么?
传入family: 6
,如果超时则传入family: 4
?
发出DNS请求并检查我是否收到了ipv6地址,然后设置系列?
答案 0 :(得分:6)
TL; DR:似乎Node将其留给操作系统。
更长的故事:http.request()
将使用引擎盖下的net
模块。该模块如何处理DNS查找可以找到here:"如果家庭不是4
而且家庭不是6
而且没有提供了特殊getaddrinfo
hints,使用dns.ADDRCONFIG
作为默认查找提示" 。
返回的地址类型由当前系统支持的地址类型决定。例如,仅当当前系统至少配置了一个IPv4地址时,才会返回IPv4地址。不考虑环回地址。
这仍然没有说明选择IP地址的 order ,但据我所知,这是留给{{1的实现}}
AFAIK,如果同时具有IPv6和IPv4接口,将执行两个DNS查询以查找主机名:IPv4 getaddrinfo
和IPv6 A
。可能是(但我在这里猜测)成功的第一次查找将提供传递回Node的IP地址。
有没有办法让node.js在可用时选择ipv6,或者我是否需要手动操作?
看起来你可以从AAAA
那样做,所以是的,我认为你必须通过{{1}执行DNS请求来手动执行此操作}}