Skip to content

Commit 1e816c2

Browse files
authored
chore(tests): prepare testing setup for http2 and https (#190)
* chore(tests): prepare testing setup for http2 and https * chore(tests): skip some https/http2 tests on some platforms
1 parent 66ce13e commit 1e816c2

File tree

9 files changed

+388
-210
lines changed

9 files changed

+388
-210
lines changed

packages/adapter/adapter-node/src/request.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,6 @@ export function createRequestAdapter(
7777
}
7878

7979
let headers = req.headers as any;
80-
// Filter out pseudo-headers
81-
if (headers[":method"]) {
82-
headers = Object.fromEntries(
83-
Object.entries(headers).filter(([key]) => !key.startsWith(":")),
84-
);
85-
}
8680

8781
const ip =
8882
req.ip ||
@@ -94,12 +88,14 @@ export function createRequestAdapter(
9488
protocolOverride ||
9589
req.protocol ||
9690
(trustProxy && parseForwardedHeader("proto")) ||
91+
headers[":scheme"] ||
9792
(req.socket?.encrypted && "https") ||
9893
"http";
9994

10095
let host =
10196
hostOverride ||
10297
(trustProxy && parseForwardedHeader("host")) ||
98+
headers[":authority"] ||
10399
headers.host;
104100

105101
if (!host && !warned) {
@@ -111,6 +107,13 @@ export function createRequestAdapter(
111107
host = "localhost";
112108
}
113109

110+
// Filter out HTTP/2 pseudo-headers
111+
if (headers[":method"]) {
112+
headers = Object.fromEntries(
113+
Object.entries(headers).filter(([key]) => !key.startsWith(":")),
114+
);
115+
}
116+
114117
const controller = new AbortController();
115118
req.once("close", () => {
116119
if (!res.writableEnded) {

packages/adapter/adapter-node/src/response.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export async function sendResponse(
4141
const hasContentLength = fetchResponse.headers.has("Content-Length");
4242

4343
if ((fetchResponse as any)[rawBodySymbol]) {
44-
writeHead(fetchResponse, res);
44+
writeHead(fetchResponse, res, req);
4545
res.end((fetchResponse as any)[rawBodySymbol]);
4646
return;
4747
}
@@ -52,7 +52,7 @@ export async function sendResponse(
5252
if (!hasContentLength) {
5353
res.setHeader("Content-Length", "0");
5454
}
55-
writeHead(fetchResponse, res);
55+
writeHead(fetchResponse, res, req);
5656
res.end();
5757
return;
5858
}
@@ -71,7 +71,7 @@ export async function sendResponse(
7171
}
7272
if (setImmediateFired) {
7373
if (!bufferWritten) {
74-
writeHead(fetchResponse, res);
74+
writeHead(fetchResponse, res, req);
7575
for (const chunk of chunks) {
7676
await writeAndAwait(chunk, res, signal);
7777
if (signal.aborted) {
@@ -107,13 +107,17 @@ export async function sendResponse(
107107
if (!hasContentLength) {
108108
res.setHeader("Content-Length", buffer.length);
109109
}
110-
writeHead(fetchResponse, res);
110+
writeHead(fetchResponse, res, req);
111111
res.end(buffer);
112112
}
113113

114-
function writeHead(fetchResponse: Response, nodeResponse: ServerResponse) {
114+
function writeHead(
115+
fetchResponse: Response,
116+
nodeResponse: ServerResponse,
117+
nodeRequest: DecoratedRequest,
118+
) {
115119
nodeResponse.statusCode = fetchResponse.status;
116-
if (fetchResponse.statusText) {
120+
if (nodeRequest.httpVersionMajor === 1 && fetchResponse.statusText) {
117121
nodeResponse.statusMessage = fetchResponse.statusText;
118122
}
119123

@@ -134,7 +138,7 @@ async function writeAndAwait(
134138
res: ServerResponse,
135139
signal: AbortSignal,
136140
) {
137-
const written = res.write(chunk);
141+
const written = (res.write as any)(chunk);
138142
if (!written) {
139143
await new Promise<void>((resolve, reject) => {
140144
function cleanup() {

0 commit comments

Comments
 (0)