Skip to content

Commit 0969789

Browse files
divybotlittledivy
andauthored
fix(ext/node): handle connectionsCheckingInterval option and send 408 for request timeout (#33836)
## Summary Enables `test-http-server-request-timeout-interrupted-headers` in node_compat suite. ## Test plan - [x] `cargo test --test node_compat -- test-http-server-request-timeout-interrupted-headers` Co-authored-by: Divy Srivastava <me@littledivy.com>
1 parent c238866 commit 0969789

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

ext/node/polyfills/_http_server.js

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,9 @@ class ConnectionsList {
200200
}
201201

202202
function onRequestTimeout(socket) {
203-
socketOnError.call(socket, new Error("ERR_HTTP_REQUEST_TIMEOUT"));
203+
const err = new Error("ERR_HTTP_REQUEST_TIMEOUT");
204+
err.code = "ERR_HTTP_REQUEST_TIMEOUT";
205+
socketOnError.call(socket, err);
204206
}
205207

206208
const STATUS_CODES = {
@@ -686,6 +688,8 @@ const badRequestResponse =
686688
"HTTP/1.1 400 Bad Request\r\nConnection: close\r\n\r\n";
687689
const requestHeaderFieldsTooLargeResponse =
688690
"HTTP/1.1 431 Request Header Fields Too Large\r\nConnection: close\r\n\r\n";
691+
const requestTimeoutResponse =
692+
"HTTP/1.1 408 Request Timeout\r\nConnection: close\r\n\r\n";
689693

690694
function socketOnError(e) {
691695
// Ignore further errors
@@ -708,6 +712,9 @@ function socketOnError(e) {
708712
case "HPE_HEADER_OVERFLOW":
709713
response = requestHeaderFieldsTooLargeResponse;
710714
break;
715+
case "ERR_HTTP_REQUEST_TIMEOUT":
716+
response = requestTimeoutResponse;
717+
break;
711718
default:
712719
response = badRequestResponse;
713720
break;
@@ -1109,6 +1116,18 @@ function storeHTTPOptions(options) {
11091116
this.keepAliveTimeout = 5_000;
11101117
}
11111118

1119+
const connectionsCheckingInterval = options.connectionsCheckingInterval;
1120+
if (connectionsCheckingInterval !== undefined) {
1121+
validateInteger(
1122+
connectionsCheckingInterval,
1123+
"connectionsCheckingInterval",
1124+
1,
1125+
);
1126+
this.connectionsCheckingInterval = connectionsCheckingInterval;
1127+
} else {
1128+
this.connectionsCheckingInterval = 30_000;
1129+
}
1130+
11121131
const requireHostHeader = options.requireHostHeader;
11131132
if (requireHostHeader !== undefined) {
11141133
validateBoolean(requireHostHeader, "options.requireHostHeader");

tests/node_compat/config.jsonc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1709,6 +1709,7 @@
17091709
"parallel/test-http-server-options-incoming-message.js": {},
17101710
"parallel/test-http-server-options-server-response.js": {},
17111711
"parallel/test-http-server-reject-cr-no-lf.js": {},
1712+
"parallel/test-http-server-request-timeout-interrupted-headers.js": {},
17121713
"parallel/test-http-server-request-timeout-upgrade.js": {},
17131714
"parallel/test-http-server-response-standalone.js": {},
17141715
"parallel/test-http-server-stale-close.js": {},

0 commit comments

Comments
 (0)