diff --git a/doc/api/http.md b/doc/api/http.md index 08bb937e4c92a4..fae66746db48f8 100644 --- a/doc/api/http.md +++ b/doc/api/http.md @@ -3633,6 +3633,16 @@ try { } ``` +## `http.setMaxIdleHTTPParser` + + + +* {number} + +Set the maximum number of idle HTTP parser,**Default:** `1000`. + [RFC 8187]: https://www.rfc-editor.org/rfc/rfc8187.txt [`'checkContinue'`]: #event-checkcontinue [`'finish'`]: #event-finish diff --git a/lib/http.js b/lib/http.js index 1366656e42eb94..71ec9e75859dd2 100644 --- a/lib/http.js +++ b/lib/http.js @@ -29,7 +29,7 @@ const { const httpAgent = require('_http_agent'); const { ClientRequest } = require('_http_client'); -const { methods } = require('_http_common'); +const { methods, parsers } = require('_http_common'); const { IncomingMessage } = require('_http_incoming'); const { validateHeaderName, @@ -123,7 +123,10 @@ module.exports = { validateHeaderName, validateHeaderValue, get, - request + request, + setMaxIdleHTTPParser(max) { + parsers.updateMax(max); + } }; ObjectDefineProperty(module.exports, 'maxHeaderSize', { diff --git a/lib/internal/freelist.js b/lib/internal/freelist.js index ac2b12c4d45a54..a389abb4659b0a 100644 --- a/lib/internal/freelist.js +++ b/lib/internal/freelist.js @@ -1,5 +1,7 @@ 'use strict'; +const { validateNumber } = require('internal/validators'); + const { ReflectApply, } = primordials; @@ -25,6 +27,11 @@ class FreeList { } return false; } + + updateMax(max) { + validateNumber(max, 'max'); + this.max = max; + } } module.exports = FreeList; diff --git a/test/parallel/test-http-set-max-idle-http-parser.js b/test/parallel/test-http-set-max-idle-http-parser.js new file mode 100644 index 00000000000000..e174820d09fbc1 --- /dev/null +++ b/test/parallel/test-http-set-max-idle-http-parser.js @@ -0,0 +1,8 @@ +'use strict'; +require('../common'); +const assert = require('assert'); +const httpCommon = require('_http_common'); +const http = require('http'); + +http.setMaxIdleHTTPParser(1); +assert.strictEqual(httpCommon.parsers.max, 1);