web-dev-qa-db-ja.com

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:未定義}

リクエストがエンドポイントによってキャプチャされず、タイムアウトが発生していないため、リクエストはエンドポイントによっても受信されていないようです。

ブラウザから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)
13
nomier

ECONNRESETは、TCP接続が予期せずに閉じられたことを意味します(プロトコルの途中など)。

しかし、あなたが書いたコードは私には問題ないようです。

多分あなたはこの問題に遭遇しています https://github.com/joyent/node/issues/536

TL; DR:最新のノードバージョンとsecureOptions: constants.SSL_OP_NO_TLSv1_2optionsに追加しました。

[〜#〜] update [〜#〜]SSLv3が壊れている https://access.redhat.com/articles/123212 ;多分ISSを捨てる?

17
wires