Skip to content

Commit 8a511d6

Browse files
authored
Match subrequest handling for edge and node (#77476)
Backports #77474 to v14
1 parent d36a1f3 commit 8a511d6

File tree

8 files changed

+0
-109
lines changed

8 files changed

+0
-109
lines changed

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

-6
Original file line numberDiff line numberDiff line change
@@ -149,12 +149,6 @@ export async function initialize(opts: {
149149
renderServer.instance =
150150
require('./render-server') as typeof import('./render-server')
151151

152-
const randomBytes = new Uint8Array(8)
153-
crypto.getRandomValues(randomBytes)
154-
const middlewareSubrequestId = Buffer.from(randomBytes).toString('hex')
155-
;(globalThis as any)[Symbol.for('@next/middleware-subrequest-id')] =
156-
middlewareSubrequestId
157-
158152
const requestHandlerImpl: WorkerRequestHandler = async (req, res) => {
159153
// internal headers should not be honored by the request handler
160154
if (!process.env.NEXT_PRIVATE_TEST_HEADERS) {

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

-11
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,5 @@ export const filterInternalHeaders = (
5757
if (INTERNAL_HEADERS.includes(header)) {
5858
delete headers[header]
5959
}
60-
61-
// If this request didn't origin from this session we filter
62-
// out the "x-middleware-subrequest" header so we don't skip
63-
// middleware incorrectly
64-
if (
65-
header === 'x-middleware-subrequest' &&
66-
headers['x-middleware-subrequest-id'] !==
67-
(globalThis as any)[Symbol.for('@next/middleware-subrequest-id')]
68-
) {
69-
delete headers['x-middleware-subrequest']
70-
}
7160
}
7261
}

packages/next/src/server/web/sandbox/context.ts

-21
Original file line numberDiff line numberDiff line change
@@ -354,27 +354,6 @@ Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation`),
354354

355355
init.headers = new Headers(init.headers ?? {})
356356

357-
// Forward subrequest header from incoming request to outgoing request
358-
const store = requestStore.getStore()
359-
if (
360-
store?.headers.has('x-middleware-subrequest') &&
361-
!init.headers.has('x-middleware-subrequest')
362-
) {
363-
init.headers.set(
364-
'x-middleware-subrequest',
365-
store.headers.get('x-middleware-subrequest') ?? ''
366-
)
367-
}
368-
init.headers.set(
369-
'x-middleware-subrequest-id',
370-
(globalThis as any)[Symbol.for('@next/middleware-subrequest-id')]
371-
)
372-
373-
const prevs =
374-
init.headers.get(`x-middleware-subrequest`)?.split(':') || []
375-
const value = prevs.concat(options.moduleName).join(':')
376-
init.headers.set('x-middleware-subrequest', value)
377-
378357
if (!init.headers.has('user-agent')) {
379358
init.headers.set(`user-agent`, `Next.js Middleware`)
380359
}

packages/next/src/server/web/sandbox/sandbox.ts

-19
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,6 @@ export async function getRuntimeContext(params: {
8383

8484
export const run = withTaggedErrors(async function runWithTaggedErrors(params) {
8585
const runtime = await getRuntimeContext(params)
86-
const subreq = params.request.headers[`x-middleware-subrequest`]
87-
const subrequests = typeof subreq === 'string' ? subreq.split(':') : []
88-
89-
const MAX_RECURSION_DEPTH = 5
90-
const depth = subrequests.reduce(
91-
(acc, curr) => (curr === params.name ? acc + 1 : acc),
92-
0
93-
)
94-
95-
if (depth >= MAX_RECURSION_DEPTH) {
96-
return {
97-
waitUntil: Promise.resolve(),
98-
response: new runtime.context.Response(null, {
99-
headers: {
100-
'x-middleware-next': '1',
101-
},
102-
}),
103-
}
104-
}
10586

10687
const edgeFunction: (args: {
10788
request: RequestData

test/e2e/app-dir/app-routes-subrequests/app-routes-subrequests.test.ts

-18
This file was deleted.

test/e2e/app-dir/app-routes-subrequests/app/route.ts

-11
This file was deleted.

test/e2e/app-dir/app-routes-subrequests/next.config.js

-10
This file was deleted.

test/e2e/middleware-general/test/index.test.ts

-13
Original file line numberDiff line numberDiff line change
@@ -102,19 +102,6 @@ describe('Middleware Runtime', () => {
102102
}
103103

104104
function runTests({ i18n }: { i18n?: boolean }) {
105-
it('should filter request header properly', async () => {
106-
const res = await next.fetch('/redirect-to-somewhere', {
107-
headers: {
108-
'x-middleware-subrequest':
109-
'middleware:middleware:middleware:middleware:middleware',
110-
},
111-
redirect: 'manual',
112-
})
113-
114-
expect(res.status).toBe(307)
115-
expect(res.headers.get('location')).toContain('/somewhere')
116-
})
117-
118105
it('should handle 404 on fallback: false route correctly', async () => {
119106
const res = await next.fetch('/ssg-fallback-false/first')
120107
expect(res.status).toBe(200)

0 commit comments

Comments
 (0)