summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/api/http.md4
-rw-r--r--lib/_http_incoming.js10
-rw-r--r--test/parallel/test-http-incoming-message-options.js24
3 files changed, 37 insertions, 1 deletions
diff --git a/doc/api/http.md b/doc/api/http.md
index 0807cc09d0..4d44121e84 100644
--- a/doc/api/http.md
+++ b/doc/api/http.md
@@ -1667,6 +1667,10 @@ the request body should be sent.
## Class: http.IncomingMessage
<!-- YAML
added: v0.1.17
+changes:
+ - version: REPLACEME
+ pr-url: https://github.com/nodejs/node/pull/30135
+ description: The `readableHighWaterMark` value mirrors that of the socket.
-->
* Extends: {stream.Readable}
diff --git a/lib/_http_incoming.js b/lib/_http_incoming.js
index ad3699cc44..3e8bd69c04 100644
--- a/lib/_http_incoming.js
+++ b/lib/_http_incoming.js
@@ -37,7 +37,15 @@ function readStop(socket) {
/* Abstract base class for ServerRequest and ClientResponse. */
function IncomingMessage(socket) {
- Stream.Readable.call(this);
+ let streamOptions;
+
+ if (socket) {
+ streamOptions = {
+ highWaterMark: socket.readableHighWaterMark
+ };
+ }
+
+ Stream.Readable.call(this, streamOptions);
this._readableState.readingMore = true;
diff --git a/test/parallel/test-http-incoming-message-options.js b/test/parallel/test-http-incoming-message-options.js
new file mode 100644
index 0000000000..61e178eb47
--- /dev/null
+++ b/test/parallel/test-http-incoming-message-options.js
@@ -0,0 +1,24 @@
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+const http = require('http');
+const net = require('net');
+const readableHighWaterMark = 1024;
+const server = http.createServer((req, res) => { res.end(); });
+
+server.listen(0, common.mustCall(() => {
+ const req = http.request({
+ port: server.address().port,
+ createConnection(options) {
+ options.readableHighWaterMark = readableHighWaterMark;
+ return net.createConnection(options);
+ }
+ }, common.mustCall((res) => {
+ assert.strictEqual(res.socket, req.socket);
+ assert.strictEqual(res.socket.readableHighWaterMark, readableHighWaterMark);
+ assert.strictEqual(res.readableHighWaterMark, readableHighWaterMark);
+ server.close();
+ }));
+
+ req.end();
+}));