summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAnna Henningsen <anna@addaleax.net>2019-11-21 00:00:43 +0100
committerAnna Henningsen <anna@addaleax.net>2019-12-01 03:00:46 +0100
commit6bf5a1d691291cdfcc4941e68f00d0003e565476 (patch)
tree9cc41f5c66cf6ac67b9392c06619125cc33585e9 /test
parent2205f85b2caadee425a0a86bd8cc3bcb889e4bfe (diff)
downloadandroid-node-v8-6bf5a1d691291cdfcc4941e68f00d0003e565476.tar.gz
android-node-v8-6bf5a1d691291cdfcc4941e68f00d0003e565476.tar.bz2
android-node-v8-6bf5a1d691291cdfcc4941e68f00d0003e565476.zip
http: make maximum header size configurable per-stream or per-server
Make `maxHeaderSize` a.k.a. `--max-header-size` configurable now that the legacy parser is gone (which only supported a single global value). Refs: https://github.com/nodejs/node/pull/30567 PR-URL: https://github.com/nodejs/node/pull/30570 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Sam Roberts <vieuxtech@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Denys Otrishko <shishugi@gmail.com>
Diffstat (limited to 'test')
-rw-r--r--test/parallel/test-http-max-header-size-per-stream.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/test/parallel/test-http-max-header-size-per-stream.js b/test/parallel/test-http-max-header-size-per-stream.js
new file mode 100644
index 0000000000..5edb8d3a95
--- /dev/null
+++ b/test/parallel/test-http-max-header-size-per-stream.js
@@ -0,0 +1,82 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const http = require('http');
+const MakeDuplexPair = require('../common/duplexpair');
+
+// Test that setting the `maxHeaderSize` option works on a per-stream-basis.
+
+// Test 1: The server sends larger headers than what would otherwise be allowed.
+{
+ const { clientSide, serverSide } = MakeDuplexPair();
+
+ const req = http.request({
+ createConnection: common.mustCall(() => clientSide),
+ maxHeaderSize: http.maxHeaderSize * 4
+ }, common.mustCall((res) => {
+ assert.strictEqual(res.headers.hello, 'A'.repeat(http.maxHeaderSize * 3));
+ res.resume(); // We don’t actually care about contents.
+ res.on('end', common.mustCall());
+ }));
+ req.end();
+
+ serverSide.resume(); // Dump the request
+ serverSide.end('HTTP/1.1 200 OK\r\n' +
+ 'Hello: ' + 'A'.repeat(http.maxHeaderSize * 3) + '\r\n' +
+ 'Content-Length: 0\r\n' +
+ '\r\n\r\n');
+}
+
+// Test 2: The same as Test 1 except without the option, to make sure it fails.
+{
+ const { clientSide, serverSide } = MakeDuplexPair();
+
+ const req = http.request({
+ createConnection: common.mustCall(() => clientSide)
+ }, common.mustNotCall());
+ req.end();
+ req.on('error', common.mustCall());
+
+ serverSide.resume(); // Dump the request
+ serverSide.end('HTTP/1.1 200 OK\r\n' +
+ 'Hello: ' + 'A'.repeat(http.maxHeaderSize * 3) + '\r\n' +
+ 'Content-Length: 0\r\n' +
+ '\r\n\r\n');
+}
+
+// Test 3: The client sends larger headers than what would otherwise be allowed.
+{
+ const testData = 'Hello, World!\n';
+ const server = http.createServer(
+ { maxHeaderSize: http.maxHeaderSize * 4 },
+ common.mustCall((req, res) => {
+ res.statusCode = 200;
+ res.setHeader('Content-Type', 'text/plain');
+ res.end(testData);
+ }));
+
+ server.on('clientError', common.mustNotCall());
+
+ const { clientSide, serverSide } = MakeDuplexPair();
+ serverSide.server = server;
+ server.emit('connection', serverSide);
+
+ clientSide.write('GET / HTTP/1.1\r\n' +
+ 'Hello: ' + 'A'.repeat(http.maxHeaderSize * 3) + '\r\n' +
+ '\r\n\r\n');
+}
+
+// Test 4: The same as Test 3 except without the option, to make sure it fails.
+{
+ const server = http.createServer(common.mustNotCall());
+
+ server.on('clientError', common.mustCall());
+
+ const { clientSide, serverSide } = MakeDuplexPair();
+ serverSide.server = server;
+ server.emit('connection', serverSide);
+
+ clientSide.write('GET / HTTP/1.1\r\n' +
+ 'Hello: ' + 'A'.repeat(http.maxHeaderSize * 3) + '\r\n' +
+ '\r\n\r\n');
+}