Skip to content

Commit 7d89c44

Browse files
committed
Revert "fix(ext/node): work correctly with wrapper Response objects, use correct rawHeaders structure (#29056)"
This reverts commit 0557466.
1 parent 61574bb commit 7d89c44

File tree

6 files changed

+8
-253
lines changed

6 files changed

+8
-253
lines changed

ext/http/00_serve.ts

+5-24
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ import {
5858
ResponsePrototype,
5959
toInnerResponse,
6060
} from "ext:deno_fetch/23_response.js";
61-
import { headerListFromHeaders } from "ext:deno_fetch/20_headers.js";
6261
import {
6362
abortRequest,
6463
fromInnerRequest,
@@ -501,15 +500,8 @@ function fastSyncResponseOrStream(
501500
return;
502501
}
503502

504-
let stream;
505-
let body;
506-
if (respBody.streamOrStatic) {
507-
stream = respBody.streamOrStatic;
508-
body = stream.body;
509-
} else {
510-
stream = respBody;
511-
body = respBody;
512-
}
503+
const stream = respBody.streamOrStatic;
504+
const body = stream.body;
513505
if (body !== undefined) {
514506
// We ensure the response has not been consumed yet in the caller of this
515507
// function.
@@ -640,19 +632,8 @@ function mapToCallback(context, callback, onError) {
640632
return;
641633
}
642634

643-
let status;
644-
let headers;
645-
let body;
646-
if (inner) {
647-
status = inner.status;
648-
headers = inner.headerList;
649-
body = inner.body;
650-
} else {
651-
status = response.status;
652-
headers = headerListFromHeaders(response.headers);
653-
body = response.body;
654-
}
655-
635+
const status = inner.status;
636+
const headers = inner.headerList;
656637
if (headers && headers.length > 0) {
657638
if (headers.length == 1) {
658639
op_http_set_response_header(req, headers[0][0], headers[0][1]);
@@ -661,7 +642,7 @@ function mapToCallback(context, callback, onError) {
661642
}
662643
}
663644

664-
fastSyncResponseOrStream(req, body, status, innerRequest);
645+
fastSyncResponseOrStream(req, inner.body, status, innerRequest);
665646
};
666647

667648
if (TRACING_ENABLED) {

ext/node/polyfills/http.ts

+3-15
Original file line numberDiff line numberDiff line change
@@ -1780,8 +1780,6 @@ Object.defineProperty(ServerResponse.prototype, "connection", {
17801780
),
17811781
});
17821782

1783-
const kRawHeaders = Symbol("rawHeaders");
1784-
17851783
// TODO(@AaronO): optimize
17861784
export class IncomingMessageForServer extends NodeReadable {
17871785
#headers: Record<string, string>;
@@ -1821,7 +1819,7 @@ export class IncomingMessageForServer extends NodeReadable {
18211819
this.method = "";
18221820
this.socket = socket;
18231821
this.upgrade = null;
1824-
this[kRawHeaders] = [];
1822+
this.rawHeaders = [];
18251823
socket?.on("error", (e) => {
18261824
if (this.listenerCount("error") > 0) {
18271825
this.emit("error", e);
@@ -1844,7 +1842,7 @@ export class IncomingMessageForServer extends NodeReadable {
18441842
get headers() {
18451843
if (!this.#headers) {
18461844
this.#headers = {};
1847-
const entries = headersEntries(this[kRawHeaders]);
1845+
const entries = headersEntries(this.rawHeaders);
18481846
for (let i = 0; i < entries.length; i++) {
18491847
const entry = entries[i];
18501848
this.#headers[entry[0]] = entry[1];
@@ -1857,16 +1855,6 @@ export class IncomingMessageForServer extends NodeReadable {
18571855
this.#headers = val;
18581856
}
18591857

1860-
get rawHeaders() {
1861-
const entries = headersEntries(this[kRawHeaders]);
1862-
const out = new Array(entries.length * 2);
1863-
for (let i = 0; i < entries.length; i++) {
1864-
out[i * 2] = entries[i][0];
1865-
out[i * 2 + 1] = entries[i][1];
1866-
}
1867-
return out;
1868-
}
1869-
18701858
// connection is deprecated, but still tested in unit test.
18711859
get connection() {
18721860
return this.socket;
@@ -1971,7 +1959,7 @@ export class ServerImpl extends EventEmitter {
19711959
req.upgrade =
19721960
request.headers.get("connection")?.toLowerCase().includes("upgrade") &&
19731961
request.headers.get("upgrade");
1974-
req[kRawHeaders] = request.headers;
1962+
req.rawHeaders = request.headers;
19751963

19761964
if (req.upgrade && this.listenerCount("upgrade") > 0) {
19771965
const { conn, response } = upgradeHttpRaw(request);

tests/specs/node/wrapped_http_response/__test__.jsonc

-8
This file was deleted.

tests/specs/node/wrapped_http_response/main.ts

-54
This file was deleted.

tests/specs/node/wrapped_http_response/response.ts

-113
This file was deleted.

tests/unit_node/http_test.ts

-39
Original file line numberDiff line numberDiff line change
@@ -2041,42 +2041,3 @@ Deno.test("[node/http] 'close' event is emitted on ServerResponse object when th
20412041
await new Promise((resolve) => server.close(resolve));
20422042
assert(responseCloseEmitted);
20432043
});
2044-
2045-
Deno.test("[node/http] rawHeaders are in flattened format", async () => {
2046-
const getHeader = (req: IncomingMessage, name: string) => {
2047-
const idx = req.rawHeaders.indexOf(name);
2048-
if (idx < 0) {
2049-
throw new Error(`Header ${name} not found`);
2050-
}
2051-
return [name, req.rawHeaders[idx + 1]];
2052-
};
2053-
const { promise, resolve } = Promise.withResolvers<void>();
2054-
const server = http.createServer((req, res) => {
2055-
resolve();
2056-
// TODO(nathanwhit): the raw headers should not be lowercased, they should be
2057-
// exactly as they appeared in the request
2058-
assertEquals(getHeader(req, "content-type"), [
2059-
"content-type",
2060-
"text/plain",
2061-
]);
2062-
assertEquals(getHeader(req, "set-cookie"), [
2063-
"set-cookie",
2064-
"foo=bar",
2065-
]);
2066-
res.end();
2067-
});
2068-
2069-
server.listen(0, async () => {
2070-
const { port } = server.address() as { port: number };
2071-
const response = await fetch(`http://localhost:${port}`, {
2072-
headers: {
2073-
"Set-Cookie": "foo=bar",
2074-
"Content-Type": "text/plain",
2075-
},
2076-
});
2077-
await response.body?.cancel();
2078-
});
2079-
2080-
await promise;
2081-
await new Promise((resolve) => server.close(resolve));
2082-
});

0 commit comments

Comments
 (0)