Javascript 节点HTTP解析

Javascript 节点HTTP解析,javascript,node.js,http,dns,request,Javascript,Node.js,Http,Dns,Request,因此,您可以像这样发出节点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)); })

因此,您可以像这样发出节点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地址是什么?如果给定的DNS解析为多个IP,节点HTTP库如何确定要使用的IP地址

我所说的多个IP是指:

dig +short stackoverflow.com
151.101.129.69
151.101.1.69
151.101.193.69
151.101.65.6

库是否有所不同?

据我所知,节点6.x.x中的库也有不同:

  • http模块使用
  • net模块使用
  • dns模块使用
  • 本机模块libuv#getaddrinfo()
  • 具体来说,您的问题是使用哪种IP:


    非常简单的算法,如:“如果存在多个IP地址,请先取一个”:

    您的
    req
    对象上应该有一个
    连接
    对象,该对象将具有您连接到的服务器的远程地址

    req.connection.remoteAddress
    
    当然,您需要等待,直到您真正建立了连接,所以我将只使用
    connect
    事件,它包含您需要的内容。未经测试,但请尝试以下方法:

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

    您所说的“DNS解析到多个IP”是什么意思?但这并不能解决问题。多个DNS查找可能导致不同的响应。谢谢!消息来源解释了很多。这是一个糟糕的算法:(谢谢你,这很有帮助。