From 20d3ec53ab2f7d229cc409e16c3b89bb055d3c0f Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sat, 19 Sep 2020 01:38:03 +0200 Subject: [PATCH 1/5] http: https requestTimeout 0 Fixes: https://github.com/nodejs/node/issues/35261 --- lib/_http_server.js | 2 +- lib/https.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/_http_server.js b/lib/_http_server.js index 21eb68d463e94a..4923c0b66a2a5d 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -373,7 +373,7 @@ function Server(options, requestListener) { this.keepAliveTimeout = 5000; this.maxHeadersCount = null; this.headersTimeout = 60 * 1000; // 60 seconds - this.requestTimeout = 0; // 120 seconds + this.requestTimeout = 0; } ObjectSetPrototypeOf(Server.prototype, net.Server.prototype); ObjectSetPrototypeOf(Server, net.Server); diff --git a/lib/https.js b/lib/https.js index 4b21977fe48c3a..6aafef6cb639e1 100644 --- a/lib/https.js +++ b/lib/https.js @@ -80,7 +80,7 @@ function Server(opts, requestListener) { this.keepAliveTimeout = 5000; this.maxHeadersCount = null; this.headersTimeout = 60 * 1000; // 60 seconds - this.requestTimeout = 120 * 1000; // 120 seconds + this.requestTimeout = 0; } ObjectSetPrototypeOf(Server.prototype, tls.Server.prototype); ObjectSetPrototypeOf(Server, tls.Server); From eba16c1ba514b192de772a88c1142798080df0d2 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sat, 19 Sep 2020 01:39:09 +0200 Subject: [PATCH 2/5] fixup --- .../test-https-server-request-timeout.js | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 test/parallel/test-https-server-request-timeout.js diff --git a/test/parallel/test-https-server-request-timeout.js b/test/parallel/test-https-server-request-timeout.js new file mode 100644 index 00000000000000..139cb70ee1432c --- /dev/null +++ b/test/parallel/test-https-server-request-timeout.js @@ -0,0 +1,73 @@ +'use strict'; + +const common = require('../common'); +if (!common.hasCrypto) + common.skip('missing crypto'); +const assert = require('assert'); +const { createServer } = require('https'); +const { connect } = require('tls'); +const fixtures = require('../common/fixtures'); + +const options = { + key: fixtures.readKey('agent1-key.pem'), + cert: fixtures.readKey('agent1-cert.pem') +}; + +// This test validates that the server returns 408 +// after server.requestTimeout if the client +// pauses before start sending the body. + +const server = createServer(options, common.mustCall((req, res) => { + let body = ''; + req.setEncoding('utf-8'); + + req.on('data', (chunk) => { + body += chunk; + }); + + req.on('end', () => { + res.writeHead(200, { 'Content-Type': 'text/plain' }); + res.write(body); + res.end(); + }); +})); + +// 0 seconds is the default +assert.strictEqual(server.requestTimeout, 0); +const requestTimeout = common.platformTimeout(1000); +server.requestTimeout = requestTimeout; +assert.strictEqual(server.requestTimeout, requestTimeout); + +server.listen(0, common.mustCall(() => { + const client = connect({ + host: '127.0.0.1', + port: server.address().port, + rejectUnauthorized: false + }); + let response = ''; + + client.on('data', common.mustCall((chunk) => { + response += chunk.toString('utf-8'); + })); + + client.resume(); + client.write('POST / HTTP/1.1\r\n'); + client.write('Content-Length: 20\r\n'); + client.write('Connection: close\r\n'); + client.write('\r\n'); + + setTimeout(() => { + client.write('12345678901234567890\r\n\r\n'); + }, common.platformTimeout(2000)).unref(); + + const errOrEnd = common.mustCall(function(err) { + assert.strictEqual( + response, + 'HTTP/1.1 408 Request Timeout\r\nConnection: close\r\n\r\n' + ); + server.close(); + }); + + client.on('end', errOrEnd); + client.on('error', errOrEnd); +})); From 865bdb37aac0fd0931d7cdd79e8bf4211e4f4548 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 20 Sep 2020 11:35:43 +0200 Subject: [PATCH 3/5] fixup --- doc/api/http.md | 2 +- .../test-https-server-request-timeout.js | 54 +------------------ 2 files changed, 3 insertions(+), 53 deletions(-) diff --git a/doc/api/http.md b/doc/api/http.md index b4348f4dfddc0c..73860c219a0191 100644 --- a/doc/api/http.md +++ b/doc/api/http.md @@ -1805,7 +1805,7 @@ changes: * `statusCode` {number} * `statusMessage` {string} -* `headers` {Object} +* `headers` {Object|Array} * Returns: {http.ServerResponse} Sends a response header to the request. The status code is a 3-digit HTTP diff --git a/test/parallel/test-https-server-request-timeout.js b/test/parallel/test-https-server-request-timeout.js index 139cb70ee1432c..0dc22f32fe02ae 100644 --- a/test/parallel/test-https-server-request-timeout.js +++ b/test/parallel/test-https-server-request-timeout.js @@ -5,7 +5,6 @@ if (!common.hasCrypto) common.skip('missing crypto'); const assert = require('assert'); const { createServer } = require('https'); -const { connect } = require('tls'); const fixtures = require('../common/fixtures'); const options = { @@ -13,24 +12,7 @@ const options = { cert: fixtures.readKey('agent1-cert.pem') }; -// This test validates that the server returns 408 -// after server.requestTimeout if the client -// pauses before start sending the body. - -const server = createServer(options, common.mustCall((req, res) => { - let body = ''; - req.setEncoding('utf-8'); - - req.on('data', (chunk) => { - body += chunk; - }); - - req.on('end', () => { - res.writeHead(200, { 'Content-Type': 'text/plain' }); - res.write(body); - res.end(); - }); -})); +const server = createServer(options); // 0 seconds is the default assert.strictEqual(server.requestTimeout, 0); @@ -38,36 +20,4 @@ const requestTimeout = common.platformTimeout(1000); server.requestTimeout = requestTimeout; assert.strictEqual(server.requestTimeout, requestTimeout); -server.listen(0, common.mustCall(() => { - const client = connect({ - host: '127.0.0.1', - port: server.address().port, - rejectUnauthorized: false - }); - let response = ''; - - client.on('data', common.mustCall((chunk) => { - response += chunk.toString('utf-8'); - })); - - client.resume(); - client.write('POST / HTTP/1.1\r\n'); - client.write('Content-Length: 20\r\n'); - client.write('Connection: close\r\n'); - client.write('\r\n'); - - setTimeout(() => { - client.write('12345678901234567890\r\n\r\n'); - }, common.platformTimeout(2000)).unref(); - - const errOrEnd = common.mustCall(function(err) { - assert.strictEqual( - response, - 'HTTP/1.1 408 Request Timeout\r\nConnection: close\r\n\r\n' - ); - server.close(); - }); - - client.on('end', errOrEnd); - client.on('error', errOrEnd); -})); +server.close(); From 383a71aada74fcbef0af6031c479f147c6898a53 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 20 Sep 2020 11:52:26 +0200 Subject: [PATCH 4/5] fixup: remove unintended change --- doc/api/http.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/http.md b/doc/api/http.md index 73860c219a0191..b4348f4dfddc0c 100644 --- a/doc/api/http.md +++ b/doc/api/http.md @@ -1805,7 +1805,7 @@ changes: * `statusCode` {number} * `statusMessage` {string} -* `headers` {Object|Array} +* `headers` {Object} * Returns: {http.ServerResponse} Sends a response header to the request. The status code is a 3-digit HTTP From f58c7255c798c8677ccac5b077d462bd32324bf1 Mon Sep 17 00:00:00 2001 From: Robert Nagy Date: Sun, 20 Sep 2020 21:16:18 +0200 Subject: [PATCH 5/5] Update test/parallel/test-https-server-request-timeout.js Co-authored-by: Luigi Pinca --- test/parallel/test-https-server-request-timeout.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/test/parallel/test-https-server-request-timeout.js b/test/parallel/test-https-server-request-timeout.js index 0dc22f32fe02ae..66a1cb9f25f82e 100644 --- a/test/parallel/test-https-server-request-timeout.js +++ b/test/parallel/test-https-server-request-timeout.js @@ -19,5 +19,3 @@ assert.strictEqual(server.requestTimeout, 0); const requestTimeout = common.platformTimeout(1000); server.requestTimeout = requestTimeout; assert.strictEqual(server.requestTimeout, requestTimeout); - -server.close();