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