スーパーエージェントを使用してHTTPリクエストを別のサーバーBに発行するnode.jsサーバーAを実行しています。
サーバー B でリクエストを調査したところ、ヘッダーconnection
が次close
のとおりであり、httpVersion が1.1
次のとおりであることがわかりました。
var http = require('http');
var request = require('superagent');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.write('req.httpVersion seen on server:' + req.httpVersion);
res.write('\nreq.headers.connection seen on server:' + req.headers.connection);
res.end();
}).listen(1337, '0.0.0.0');
request
.get('localhost:1337/helloword')
.end(function (err, res) {
console.log(res.text);
});
これはにつながります:
req.httpVersion seen on server:1.1
req.headers.connection seen on server:close
ただし、ブラウザから同じサーバーにアクセスすると、次のようになります。
req.httpVersion seen on server:1.1
req.headers.connection seen on server:keep-alive
https://www.rfc-editor.org/rfc/rfc2616#page-172から keep-alive
、Connection: close
. _
だから、私の質問は次のとおりです。
- Superagent / Node.js がキープアライブ / 永続接続を使用しないようにリクエストを明示的に設定するのはなぜですか?
- Superagent / Node.js にキープアライブ接続を使用させるにはどうすればよいですか?
- 正確な動作にさらに影響を与えるにはどうすればよいですか (開いたままにする接続の数、タイムアウトなど)。