Skip to content

Commit b39b67f

Browse files
authored
[fix] handle incoming requests from HTTP/2 (#3572)
* strip out HTTP/2 headers in getRequest * remove workaround forcing Vite to use HTTP/1 for dev mode * add changeset
1 parent 80233c2 commit b39b67f

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

.changeset/eight-readers-thank.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix handling an incoming request from HTTP/2

packages/kit/src/core/dev/index.js

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,6 @@ export async function dev({ cwd, port, host, https, config }) {
8585
merged_config.server.https = https;
8686
}
8787

88-
// by default, when enabling HTTPS in Vite, it also enables HTTP/2
89-
// however, node-fetch's Request implementation does not like the HTTP/2 headers
90-
// we set a no-op proxy config to force Vite to downgrade to TLS-only
91-
// see https://vitejs.dev/config/#server-https
92-
if (merged_config.server.https && !merged_config.server.proxy) {
93-
merged_config.server.proxy = {};
94-
}
95-
9688
if (port) {
9789
merged_config.server.port = port;
9890
}

packages/kit/src/node.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,19 @@ function get_raw_body(req) {
5252

5353
/** @type {import('@sveltejs/kit/node').GetRequest} */
5454
export async function getRequest(base, req) {
55+
let headers = /** @type {Record<string, string>} */ (req.headers);
56+
if (req.httpVersionMajor === 2) {
57+
// we need to strip out the HTTP/2 pseudo-headers because node-fetch's
58+
// Request implementation doesn't like them
59+
headers = Object.assign({}, headers);
60+
delete headers[':method'];
61+
delete headers[':path'];
62+
delete headers[':authority'];
63+
delete headers[':scheme'];
64+
}
5565
return new Request(base + req.url, {
5666
method: req.method,
57-
headers: /** @type {Record<string, string>} */ (req.headers),
67+
headers,
5868
body: await get_raw_body(req) // TODO stream rather than buffer
5969
});
6070
}

0 commit comments

Comments
 (0)