Skip to content

Commit 2b65e0c

Browse files
authored
fix(server): should sync all headers from req.headers (#7107)
1 parent d3786aa commit 2b65e0c

File tree

4 files changed

+27
-6
lines changed

4 files changed

+27
-6
lines changed

.changeset/mean-birds-bake.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@modern-js/server-core': patch
3+
---
4+
5+
fix(server): should sync all headers from req.headers
6+
fix(server): 应该从 req.headers 同步所有的 headers

packages/server/core/src/adapters/node/node.ts

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,22 @@ export const createWebRequest = (
2525
body?: BodyInit,
2626
): Request => {
2727
const headerRecord: [string, string][] = [];
28-
const len = req.rawHeaders.length;
29-
for (let i = 0; i < len; i += 2) {
30-
const key = req.rawHeaders[i];
31-
if (!key.startsWith(':')) {
32-
headerRecord.push([key, req.rawHeaders[i + 1]]);
28+
29+
for (const [key, value] of Object.entries(req.headers)) {
30+
if (key.startsWith(':')) {
31+
continue;
32+
}
33+
34+
if (Array.isArray(value)) {
35+
for (const item of value) {
36+
if (item !== undefined) {
37+
headerRecord.push([key, item]);
38+
}
39+
}
40+
} else if (value !== undefined) {
41+
if (typeof value === 'string') {
42+
headerRecord.push([key, value]);
43+
}
3344
}
3445
}
3546

packages/server/core/src/plugins/render/render.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,7 +381,8 @@ async function getRenderMode(
381381
return 'data';
382382
}
383383
const fallbackHeaderValue: string | null =
384-
req.headers.get(fallbackHeader) || nodeReq?.headers[fallbackHeader];
384+
(req.headers.get(fallbackHeader) as string) ||
385+
(nodeReq?.headers[fallbackHeader] as string);
385386
if (forceCSR && (query.csr || fallbackHeaderValue)) {
386387
if (query.csr) {
387388
await onFallback?.('query');
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,5 @@
1+
import type { IncomingMessage, ServerResponse } from 'http';
2+
import type { Http2ServerRequest, Http2ServerResponse } from 'http2';
3+
14
export type NodeRequest = IncomingMessage | Http2ServerRequest;
25
export type NodeResponse = ServerResponse | Http2ServerResponse;

0 commit comments

Comments
 (0)