Skip to content

Commit 5d9f419

Browse files
authored
Revert "Drop ipc server headers filters (#56226)" (#56836)
x-ref: #56038 (comment) x-ref: #56038 (comment) http header `connection` could still fail the image requests while running next build
1 parent 83d8867 commit 5d9f419

File tree

4 files changed

+22
-12
lines changed

4 files changed

+22
-12
lines changed

packages/next/src/server/lib/router-utils/resolve-routes.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import type { NextUrlWithParsedQuery } from '../../request-meta'
1212
import url from 'url'
1313
import setupDebug from 'next/dist/compiled/debug'
1414
import { getCloneableBody } from '../../body-streams'
15+
import { filterReqHeaders, ipcForbiddenHeaders } from '../server-ipc/utils'
1516
import { stringifyQuery } from '../../server-route-utils'
1617
import { formatHostname } from '../format-hostname'
1718
import { toNodeOutgoingHttpHeaders } from '../../web/utils'
@@ -457,7 +458,7 @@ export function getResolveRoutes(
457458
const { res: mockedRes } = await createRequestResponseMocks({
458459
url: req.url || '/',
459460
method: req.method || 'GET',
460-
headers: invokeHeaders,
461+
headers: filterReqHeaders(invokeHeaders, ipcForbiddenHeaders),
461462
resWriter(chunk) {
462463
readableController.enqueue(Buffer.from(chunk))
463464
return true
@@ -560,7 +561,7 @@ export function getResolveRoutes(
560561
delete middlewareHeaders['x-middleware-next']
561562

562563
for (const [key, value] of Object.entries({
563-
...middlewareHeaders,
564+
...filterReqHeaders(middlewareHeaders, ipcForbiddenHeaders),
564565
})) {
565566
if (
566567
[

packages/next/src/server/lib/server-ipc/invoke-request.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { IncomingMessage } from 'http'
22
import type { Readable } from 'stream'
3+
import { filterReqHeaders, ipcForbiddenHeaders } from './utils'
34

45
export const invokeRequest = async (
56
targetUrl: string,
@@ -10,10 +11,13 @@ export const invokeRequest = async (
1011
},
1112
readableBody?: Readable | ReadableStream
1213
) => {
13-
const invokeHeaders = {
14-
'cache-control': '',
15-
...requestInit.headers,
16-
}
14+
const invokeHeaders = filterReqHeaders(
15+
{
16+
'cache-control': '',
17+
...requestInit.headers,
18+
},
19+
ipcForbiddenHeaders
20+
) as IncomingMessage['headers']
1721

1822
return await fetch(targetUrl, {
1923
headers: invokeHeaders as any as Headers,

packages/next/src/server/lib/server-ipc/utils.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
export const actionsForbiddenHeaders = [
1+
export const ipcForbiddenHeaders = [
22
'accept-encoding',
33
'keepalive',
44
'keep-alive',
@@ -8,7 +8,10 @@ export const actionsForbiddenHeaders = [
88
'connection',
99
// marked as unsupported by undici: https://github.com/nodejs/undici/blob/c83b084879fa0bb8e0469d31ec61428ac68160d5/lib/core/request.js#L354
1010
'expect',
11-
// action specific
11+
]
12+
13+
export const actionsForbiddenHeaders = [
14+
...ipcForbiddenHeaders,
1215
'content-length',
1316
]
1417

packages/next/src/server/next-server.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ import { nodeFs } from './lib/node-fs-methods'
9393
import { getRouteRegex } from '../shared/lib/router/utils/route-regex'
9494
import { invokeRequest } from './lib/server-ipc/invoke-request'
9595
import { pipeReadable } from './pipe-readable'
96+
import { filterReqHeaders, ipcForbiddenHeaders } from './lib/server-ipc/utils'
9697
import { createRequestResponseMocks } from './lib/mock-request'
9798
import { NEXT_RSC_UNION_QUERY } from '../client/components/app-router-headers'
9899
import { signalFromNodeResponse } from './web/spec-extension/adapters/next-request'
@@ -549,12 +550,13 @@ export default class NextNodeServer extends BaseServer {
549550
signal: signalFromNodeResponse(res.originalResponse),
550551
}
551552
)
552-
const nodeOutgoingHttpHeaders = toNodeOutgoingHttpHeaders(
553-
invokeRes.headers
553+
const filteredResHeaders = filterReqHeaders(
554+
toNodeOutgoingHttpHeaders(invokeRes.headers),
555+
ipcForbiddenHeaders
554556
)
555557

556-
for (const key of Object.keys(nodeOutgoingHttpHeaders)) {
557-
newRes.setHeader(key, nodeOutgoingHttpHeaders[key] || '')
558+
for (const key of Object.keys(filteredResHeaders)) {
559+
newRes.setHeader(key, filteredResHeaders[key] || '')
558560
}
559561
newRes.statusCode = invokeRes.status || 200
560562

0 commit comments

Comments
 (0)