diff --git a/lib/_http_client.js b/lib/_http_client.js index c3ef9de2049..22ae85c9278 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -606,7 +606,6 @@ function tickOnSocket(req, socket) { req.connection = socket; parser.reinitialize(HTTPParser.RESPONSE); parser.socket = socket; - parser.incoming = null; parser.outgoing = req; req.parser = parser; @@ -619,9 +618,6 @@ function tickOnSocket(req, socket) { // Propagate headers limit from request object to parser if (typeof req.maxHeadersCount === 'number') { parser.maxHeaderPairs = req.maxHeadersCount << 1; - } else { - // Set default value because parser may be reused from FreeList - parser.maxHeaderPairs = 2000; } parser.onIncoming = parserOnIncomingClient; diff --git a/lib/_http_common.js b/lib/_http_common.js index c8998f4d85a..7eb37511bd1 100644 --- a/lib/_http_common.js +++ b/lib/_http_common.js @@ -41,6 +41,8 @@ const kOnBody = HTTPParser.kOnBody | 0; const kOnMessageComplete = HTTPParser.kOnMessageComplete | 0; const kOnExecute = HTTPParser.kOnExecute | 0; +const MAX_HEADER_PAIRS = 2000; + // Only called in the slow case where slow means // that the request headers were either fragmented // across multiple TCP packets or too large to be @@ -159,6 +161,9 @@ const parsers = new FreeList('parsers', 1000, function() { parser.incoming = null; parser.outgoing = null; + parser.maxHeaderPairs = MAX_HEADER_PAIRS; + + parser.onIncoming = null; parser[kOnHeaders] = parserOnHeaders; parser[kOnHeadersComplete] = parserOnHeadersComplete; parser[kOnBody] = parserOnBody; @@ -180,6 +185,8 @@ function closeParserInstance(parser) { parser.close(); } function freeParser(parser, req, socket) { if (parser) { parser._headers = []; + parser._url = ''; + parser.maxHeaderPairs = MAX_HEADER_PAIRS; parser.onIncoming = null; if (parser._consumed) parser.unconsume(); diff --git a/lib/_http_server.js b/lib/_http_server.js index c3abfd37bb5..1d6cada3270 100644 --- a/lib/_http_server.js +++ b/lib/_http_server.js @@ -342,14 +342,10 @@ function connectionListenerInternal(server, socket) { parser.reinitialize(HTTPParser.REQUEST); parser.socket = socket; socket.parser = parser; - parser.incoming = null; // Propagate headers limit from server instance to parser if (typeof server.maxHeadersCount === 'number') { parser.maxHeaderPairs = server.maxHeadersCount << 1; - } else { - // Set default value because parser may be reused from FreeList - parser.maxHeaderPairs = 2000; } var state = {