diff options
author | Anna Henningsen <anna@addaleax.net> | 2019-11-21 00:00:43 +0100 |
---|---|---|
committer | Anna Henningsen <anna@addaleax.net> | 2019-12-01 03:00:46 +0100 |
commit | 6bf5a1d691291cdfcc4941e68f00d0003e565476 (patch) | |
tree | 9cc41f5c66cf6ac67b9392c06619125cc33585e9 /lib | |
parent | 2205f85b2caadee425a0a86bd8cc3bcb889e4bfe (diff) | |
download | android-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 'lib')
-rw-r--r-- | lib/_http_client.js | 9 | ||||
-rw-r--r-- | lib/_http_server.js | 9 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/_http_client.js b/lib/_http_client.js index 6d8cb8fc8e..ece93d14e0 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -55,6 +55,7 @@ const { ERR_INVALID_PROTOCOL, ERR_UNESCAPED_CHARACTERS } = codes; +const { validateInteger } = require('internal/validators'); const { getTimerDuration } = require('internal/timers'); const { DTRACE_HTTP_CLIENT_REQUEST, @@ -179,6 +180,11 @@ function ClientRequest(input, options, cb) { method = this.method = 'GET'; } + const maxHeaderSize = options.maxHeaderSize; + if (maxHeaderSize !== undefined) + validateInteger(maxHeaderSize, 'maxHeaderSize', 0); + this.maxHeaderSize = maxHeaderSize; + this.path = options.path || '/'; if (cb) { this.once('response', cb); @@ -669,7 +675,8 @@ function tickOnSocket(req, socket) { const parser = parsers.alloc(); req.socket = socket; parser.initialize(HTTPParser.RESPONSE, - new HTTPClientAsyncResource('HTTPINCOMINGMESSAGE', req)); + new HTTPClientAsyncResource('HTTPINCOMINGMESSAGE', req), + req.maxHeaderSize || 0); parser.socket = socket; parser.outgoing = req; req.parser = parser; diff --git a/lib/_http_server.js b/lib/_http_server.js index 3d114d8711..6c52f7adbc 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -58,6 +58,7 @@ const { ERR_INVALID_ARG_TYPE, ERR_INVALID_CHAR } = require('internal/errors').codes; +const { validateInteger } = require('internal/validators'); const Buffer = require('buffer').Buffer; const { DTRACE_HTTP_SERVER_REQUEST, @@ -322,6 +323,11 @@ function Server(options, requestListener) { this[kIncomingMessage] = options.IncomingMessage || IncomingMessage; this[kServerResponse] = options.ServerResponse || ServerResponse; + const maxHeaderSize = options.maxHeaderSize; + if (maxHeaderSize !== undefined) + validateInteger(maxHeaderSize, 'maxHeaderSize', 0); + this.maxHeaderSize = maxHeaderSize; + net.Server.call(this, { allowHalfOpen: true }); if (requestListener) { @@ -379,7 +385,8 @@ function connectionListenerInternal(server, socket) { // https://github.com/nodejs/node/pull/21313 parser.initialize( HTTPParser.REQUEST, - new HTTPServerAsyncResource('HTTPINCOMINGMESSAGE', socket) + new HTTPServerAsyncResource('HTTPINCOMINGMESSAGE', socket), + server.maxHeaderSize || 0 ); parser.socket = socket; |