node.js http.request和ipv6 vs ipv4

时间:2016-05-22 18:17:47

标签: node.js ipv6

在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地址,然后设置系列?

1 个答案:

答案 0 :(得分:6)

TL; DR:似乎Node将其留给操作系统。

更长的故事:http.request()将使用引擎盖下的net模块。该模块如何处理DNS查找可以找到here"如果家庭不是4而且家庭不是6而且没有提供了特殊getaddrinfo hints,使用dns.ADDRCONFIG作为默认查找提示"

dns.ADDRCONFIG表示:

  

返回的地址类型由当前系统支持的地址类型决定。例如,仅当当前系统至少配置了一个IPv4地址时,才会返回IPv4地址。不考虑环回地址。

这仍然没有说明选择IP地址的 order ,但据我所知,这是留给{{1的实现}}

AFAIK,如果同时具有IPv6和IPv4接口,将执行两个DNS查询以查找主机名:IPv4 getaddrinfo和IPv6 A。可能是(但我在这里猜测)成功的第一次查找将提供传递回Node的IP地址。

  

有没有办法让node.js在可用时选择ipv6,或者我是否需要手动操作?

看起来你可以从AAAA那样做,所以是的,我认为你必须通过{{1}执行DNS请求来手动执行此操作}}