节点HTTPparsing

所以你可以像这样做一个节点的HTTP GET请求:

var http = require('http'); var options = { host: 'stackoverflow.com', }; var req = http.get(options, function(res) { console.log('STATUS: ' + res.statusCode); console.log('HEADERS: ' + JSON.stringify(res.headers)); }); req.on('error', function(e) { console.log('ERROR: ' + e.message); }); 

我想看看http.get将要使用哪个IP地址? 如果给定的DNSparsing为多个IP,节点HTTP lib如何确定使用哪个IP地址?

通过多个IP我的意思是这样的:

 dig +short stackoverflow.com 151.101.129.69 151.101.1.69 151.101.193.69 151.101.65.6 

节点请求库不同吗?

你的req对象应该有一个connection对象,它将有你连接的服务器的远程地址。

 req.connection.remoteAddress 

当然,你需要等到你真的有一个连接,所以我只需要使用你所需要的connect事件。 未经testing,但试试这个:

 req.on('connect', (res, socket, head) => { console.log(socket.remoteAddress); }); 

https://nodejs.org/api/net.html#net_socket_remoteaddress

据我所知,在节点6.xx中也是如此:

  1. http模块使用
  2. 模块使用
  3. dns模块使用
  4. 本机模块libuv#getaddrinfohttp://docs.libuv.org/en/v1.x/dns.html#c.uv_getaddrinfo

具体你的问题使用哪个IP: https : //github.com/nodejs/node/blob/cd439465cc8b408eb88822c7695def611acfaaf7/lib/dns.js#L82

非常简单的algorithm,如:“如果有多个IP地址是第一个”:)