Подтвердить что ты не робот

Nodejs https Ошибка: сокет зависает с localhost

У меня есть этот небольшой фрагмент кода, который нацелен на конечную точку, размещенную на 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);
});

и я всегда получаю ошибку:

{[Ошибка: сокет повесил трубку]: "ECONNRESET", sslError: undefined}

Кажется, что запрос даже не получен конечной точкой, потому что он не захвачен им и не происходит тайм-аута.

Если я попробую запрос, например https://localhost, в браузере, он успешно отправлен.

Если я просто изменил хост в коде на что-то вроде encrypted.google.com, он также успешно работает.

Кто-нибудь знает, почему это может случиться?

Изменить. Я также попытался добавить те же заголовки, отправленные браузером, как accept, user-agent и т.д., но все еще не работает.

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)
4b9b3361

Ответ 1

ECONNRESET означает, что соединение TCP было неожиданно закрыто, т.е. где-то в середине протокола.

Но код, который вы написали, мне подходит.

Возможно, вы столкнулись с этой проблемой https://github.com/joyent/node/issues/5360

TL; DR: вы можете попробовать с последней версией node и secureOptions: constants.SSL_OP_NO_TLSv1_2, добавленной в ваш options.

ОБНОВЛЕНИЕ SSLv3 не работает, https://access.redhat.com/articles/1232123; может быть, ISS?