nodejs https错误:套接字挂断了本地主机

Posted

技术标签:

【中文标题】nodejs https错误:套接字挂断了本地主机【英文标题】:nodejs https Error: socket hang up with localhost 【发布时间】:2014-04-28 00:09:40 【问题描述】:

我有这个小代码 sn-p,它针对托管在 localhost 上的端点

var https = require('https');

var options = 
  hostname: 'localhost',
  port: 443,
  path: '/',
  method: 'GET',
  agent: false
;

var req = https.request(options, function(res) 
  console.log("statusCode: ", res.statusCode);
  console.log("headers: ", res.headers);
  res.on('data', function(d) 
    process.stdout.write(d);
  );
);
req.end();

req.on('error', function(e) 
  console.error(e);
);

我总是得到错误:

[Error: socket hang up] 代码: 'ECONNRESET', sslError: undefined

似乎端点甚至没有收到请求,因为它没有被它捕获并且没有发生超时。

如果我从浏览器尝试像 https://localhost 这样的请求,它会成功发送。

如果我只是将代码中的主机更改为 encrypted.google.com 之类的内容,它也可以成功运行。

有人知道为什么会发生这种情况吗?

编辑:我也尝试添加浏览器发送的相同标头,例如接受、用户代理等,但仍然无法正常工作

Edit2:这是我记录时出现的堆栈跟踪:

Error: socket hang up
at SecurePair.error (tls.js:1013:23)
at EncryptedStream.CryptoStream._done (tls.js:705:22)
at CleartextStream.read [as _read] (tls.js:496:24)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.onCryptoStreamFinish (tls.js:301:47)
at EncryptedStream.g (events.js:180:16)
at EncryptedStream.EventEmitter.emit (events.js:117:20)
at finishMaybe (_stream_writable.js:360:12)
at endWritable (_stream_writable.js:367:3)
at EncryptedStream.Writable.end (_stream_writable.js:345:5)

【问题讨论】:

你能在选项中试试 strictSSL: false 吗? 【参考方案1】:

ECONNRESET 表示 TCP 连接意外关闭,即。协议中间的某个地方。

但是你写的代码在我看来没问题。

也许你遇到了这个问题https://github.com/joyent/node/issues/5360

TL;DR:您可以尝试使用最新的节点版本并将secureOptions: constants.SSL_OP_NO_TLSv1_2 添加到您的options

更新 SSLv3 已损坏,https://access.redhat.com/articles/1232123 ;也许放弃国际空间站?

【讨论】:

我使用的是最新的节点版本 v0.10.26,我尝试了“secureOptions: constants.SSL_OP_NO_TLSv1_2”,但我仍然得到同样的错误。问题是否与主机的解析方式有关或与某个防火墙有关,端点是 ipv4,有没有办法确保主机被正确解析? 回复:主持人,我不完全确定,我怀疑。 也许secureProtocol: 'SSLv3_method' 可以为您工作。你用的是什么网络服务器? curl -v https://localhost 的踪迹也会很有用。另外,它是自签名证书吗? 好的,所以它与secureProtocol一起工作得很好:'SSLv3_method'这实际上做了什么? :) 也只有在 agent: false 的情况下,如果我为代理设置任何值,错误就会回来,你知道为什么会这样吗?就像一个信息:hebserver 是 IIS,curl 工作正常,证书是自签名的。 AFAIK,“强制”SSL 版本 3。我很想说 ISS 是你的问题,但我什至从来没有用棍子碰过它:-P。使用自签名证书,您可能需要rejectUnauthorized: false 和可选的strictSSL: false。我不确定这会带来什么(安全)影响。

以上是关于nodejs https错误:套接字挂断了本地主机的主要内容,如果未能解决你的问题,请参考以下文章

nodejs http请求套接字挂断

错误:使用 https 挂断套接字

多个 API 调用的 Node Js 中的套接字挂断错误

由于错误处理承诺而导致的套接字挂断

“错误:套接字挂断”与 Express

邮递员:socket挂断