Skip to content

Commit

Permalink
http: only set keep-alive when not exists
Browse files Browse the repository at this point in the history
Backport-PR-URL: nodejs#35138
  • Loading branch information
atian25 committed Oct 13, 2020
1 parent 4d1df84 commit 5732f67
Show file tree
Hide file tree
Showing 3 changed files with 38 additions and 3 deletions.
8 changes: 6 additions & 2 deletions lib/_http_outgoing.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ function OutgoingMessage() {
this._last = false;
this.chunkedEncoding = false;
this.shouldKeepAlive = true;
this._defaultKeepAlive = true;
this.useChunkedEncodingByDefault = true;
this.sendDate = false;
this._removedConnection = false;
Expand Down Expand Up @@ -405,8 +406,8 @@ function _storeHeader(firstLine, headers) {
(state.contLen || this.useChunkedEncodingByDefault || this.agent);
if (shouldSendKeepAlive) {
header += 'Connection: keep-alive\r\n';
if (this._keepAliveTimeout) {
const timeoutSeconds = MathFloor(this._keepAliveTimeout) / 1000;
if (this._keepAliveTimeout && this._defaultKeepAlive) {
const timeoutSeconds = MathFloor(this._keepAliveTimeout / 1000);
header += `Keep-Alive: timeout=${timeoutSeconds}\r\n`;
}
} else {
Expand Down Expand Up @@ -502,6 +503,9 @@ function matchHeader(self, state, field, value) {
case 'trailer':
state[field] = true;
break;
case 'keep-alive':
self._defaultKeepAlive = false;
break;
}
}

Expand Down
31 changes: 31 additions & 0 deletions test/parallel/test-http-keep-alive-timeout-custom.js
Original file line number Diff line number Diff line change
@@ -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();
}));
}));
2 changes: 1 addition & 1 deletion test/parallel/test-http-keep-alive-timeout.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ const server = http.createServer(common.mustCall((req, res) => {
res.write(body);
res.end();
}));
server.keepAliveTimeout = 12000;
server.keepAliveTimeout = 12010;

const agent = new http.Agent({ maxSockets: 1, keepAlive: true });

Expand Down

0 comments on commit 5732f67

Please sign in to comment.