node.js http.request和ipv6与ipv4
在node.js 4.x的函数http.request
文档说
选项
- 系列:parsing主机和主机名时使用的IP地址族。 有效值为4或6. 未指定时,将使用IP v4和v6。
当没有指定family
时,node.jsselectipv6或ipv4的逻辑是什么?
据我可以告诉什么时候我不指定它默认是或更喜欢ipv4,而浏览器,至less铬,更喜欢ipv6
有没有办法让node.jsselectipv6可用时,还是我必须手动?
如果我手动做,应该怎么做?
-
通过
family: 6
,如果超时然后通过family: 4
? -
做一个DNS请求,并检查我是否得到一个ipv6地址,然后设置家庭?
TL; DR: Node似乎将这一切留给了操作系统。
更长的故事: http.request()
将使用引擎盖下的net
模块。 这个模块如何处理DNS查找可以在这里find: “如果family不是4
,family不是6
,并且没有提供特殊的getaddrinfo
提示 ,则使用dns.ADDRCONFIG
作为默认查找提示 。
dns.ADDRCONFIG
意思是:
返回的地址types由当前系统支持的地址types决定。 例如,如果当前系统至lessconfiguration了一个IPv4地址,则仅返回IPv4地址。 不考虑环回地址。
这仍然没有说什么IP地址将被挑选的顺序 ,但据我所知,这是留给执行getaddrinfo
。
AFAIK,如果您同时拥有IPv6和IPv4接口,则将执行两个DNS查询来查找主机名: A
用于IPv4, AAAA
用于IPv6。 这可能是(但我猜在这里),第一个查找成功将提供传回给节点的IP地址。
有没有办法让node.jsselectipv6可用时,还是我必须手动?
它看起来不像你可以从http.request()
这样做,所以是的,我想你将不得不通过执行一个family : 6
的DNS请求手动family : 6
。