node.js - Node : Can't bind to IPv6 localAddress while using https.请求()

标签 node.js

使用 HTTP 时,我可以很好地绑定(bind)到 localAddress,但是当我切换到 HTTPS 时,我会收到错误:bind EINVAL。请考虑以下代码:

var http = require('http');
var https = require('https');
var options = { host:'icanhazip.com',path:'/',localAddress:'2604:a880:1:20::27:a00f',family:6 };
callback = function(response) {
  var data = '';
  response.on('data',function(chunk) { data+= chunk; });
  response.on('error',function(error) { console.log("error: "+error.message); });
  response.on('end',function() {
    console.log(data);
  });
}
http.request(options,callback).end(); // Works. IP:2604:a880:1:20::27:a00f
https.request(options,callback).end(); // Fails. IP:2604:a880:1:20::27:a00f
https.request({host:'icanhazip.com',path:'/',family:6},callback).end(); // Works. IP:2604:a880:1:20::27:a00f

这是运行 Node v5.0.0 时的错误:

Error: bind EINVAL 2604:a880:1:20::27:a00f
    at Object.exports._errnoException (util.js:860:11)
    at exports._exceptionWithHostPort (util.js:883:20)
    at connect (net.js:809:16)
    at net.js:984:7
    at GetAddrInfoReqWrap.asyncCallback [as callback] (dns.js:63:16)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:82:10)

工作代码和失败代码之间的唯一区别是设置 localAddress ,具有讽刺意味的是,最后一个示例绑定(bind)到正确的 IP 地址,但不允许您这样做它使用 localAddress

这里的问题是,在我的用例下,我必须从完全独立的 IPv6 地址发出请求,并且它可以很好地处理 HTTP,但我需要它才能处理 HTTPS 请求。目前我只能在使用 cURL 时完成这项工作。您能否提供一些关于为什么会发生这种情况的见解,或者我如何在没有额外库的情况下完成这项工作?

最佳答案

我也遇到了和你一样的问题。弄清楚了。将您的 Node 更新到最新的稳定版本。他们修好了。使用 node --version 检查它,我使用的是 6.6.0,它运行得很好。

我通过 apt-get 获得的版本太旧了。

关于node.js - Node : Can't bind to IPv6 localAddress while using https.请求(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34078439/

相关文章:

node.js - 如何使用从 Controller 返回的值?在 NestJs 上测试 Controller

javascript - derby.js vs capsule/thoonk?

node.js - 将我的 native Node 模块与 Electron 结合使用

jquery - 改进了使用正则表达式替换的性能

javascript - 使用 Nodejs 服务器和 Pug 如何一次显示列表中的元素并使用按钮进行迭代?

javascript - Sequelize JS Node 使用先前 Promise 中的新数据更新多个实体

javascript - 如何在 Mocha 测试中要求命名空间模型?

node.js - 了解 Lambda 来调用 API

node.js - 如何避免使用 redux 在 react-apollo SSR 中重新获取客户端?

javascript - 在客户端存储 mySQL 查询结果以供将来的请求使用