http: only set keep-alive when not exists
PR-URL: https://github.com/nodejs/node/pull/35138 Fixes: https://github.com/nodejs/node/issues/34561 Reviewed-By: Ricky Zhou <0x19951125@gmail.com> Reviewed-By: Robert Nagy <ronagy@icloud.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com> Reviewed-By: Zeyu Yang <himself65@outlook.com>
This commit is contained in:
parent
3c564632fa
commit
a63e121e33
@ -104,6 +104,7 @@ function OutgoingMessage() {
|
|||||||
this._last = false;
|
this._last = false;
|
||||||
this.chunkedEncoding = false;
|
this.chunkedEncoding = false;
|
||||||
this.shouldKeepAlive = true;
|
this.shouldKeepAlive = true;
|
||||||
|
this._defaultKeepAlive = true;
|
||||||
this.useChunkedEncodingByDefault = true;
|
this.useChunkedEncodingByDefault = true;
|
||||||
this.sendDate = false;
|
this.sendDate = false;
|
||||||
this._removedConnection = false;
|
this._removedConnection = false;
|
||||||
@ -427,8 +428,8 @@ function _storeHeader(firstLine, headers) {
|
|||||||
(state.contLen || this.useChunkedEncodingByDefault || this.agent);
|
(state.contLen || this.useChunkedEncodingByDefault || this.agent);
|
||||||
if (shouldSendKeepAlive) {
|
if (shouldSendKeepAlive) {
|
||||||
header += 'Connection: keep-alive\r\n';
|
header += 'Connection: keep-alive\r\n';
|
||||||
if (this._keepAliveTimeout) {
|
if (this._keepAliveTimeout && this._defaultKeepAlive) {
|
||||||
const timeoutSeconds = MathFloor(this._keepAliveTimeout) / 1000;
|
const timeoutSeconds = MathFloor(this._keepAliveTimeout / 1000);
|
||||||
header += `Keep-Alive: timeout=${timeoutSeconds}\r\n`;
|
header += `Keep-Alive: timeout=${timeoutSeconds}\r\n`;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -524,6 +525,9 @@ function matchHeader(self, state, field, value) {
|
|||||||
case 'trailer':
|
case 'trailer':
|
||||||
state[field] = true;
|
state[field] = true;
|
||||||
break;
|
break;
|
||||||
|
case 'keep-alive':
|
||||||
|
self._defaultKeepAlive = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
31
test/parallel/test-http-keep-alive-timeout-custom.js
Normal file
31
test/parallel/test-http-keep-alive-timeout-custom.js
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
const common = require('../common');
|
||||||
|
const http = require('http');
|
||||||
|
const assert = require('assert');
|
||||||
|
|
||||||
|
const server = http.createServer(common.mustCall((req, res) => {
|
||||||
|
const body = 'hello world\n';
|
||||||
|
|
||||||
|
res.writeHead(200, {
|
||||||
|
'Content-Length': body.length,
|
||||||
|
'Keep-Alive': 'timeout=50'
|
||||||
|
});
|
||||||
|
res.write(body);
|
||||||
|
res.end();
|
||||||
|
}));
|
||||||
|
server.keepAliveTimeout = 12010;
|
||||||
|
|
||||||
|
const agent = new http.Agent({ maxSockets: 1, keepAlive: true });
|
||||||
|
|
||||||
|
server.listen(0, common.mustCall(function() {
|
||||||
|
http.get({
|
||||||
|
path: '/', port: this.address().port, agent: agent
|
||||||
|
}, common.mustCall((response) => {
|
||||||
|
response.resume();
|
||||||
|
assert.strictEqual(
|
||||||
|
response.headers['keep-alive'], 'timeout=50');
|
||||||
|
server.close();
|
||||||
|
agent.destroy();
|
||||||
|
}));
|
||||||
|
}));
|
@ -11,7 +11,7 @@ const server = http.createServer(common.mustCall((req, res) => {
|
|||||||
res.write(body);
|
res.write(body);
|
||||||
res.end();
|
res.end();
|
||||||
}));
|
}));
|
||||||
server.keepAliveTimeout = 12000;
|
server.keepAliveTimeout = 12010;
|
||||||
|
|
||||||
const agent = new http.Agent({ maxSockets: 1, keepAlive: true });
|
const agent = new http.Agent({ maxSockets: 1, keepAlive: true });
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user