diff --git a/packages/next/src/server/lib/router-server.ts b/packages/next/src/server/lib/router-server.ts index bc808b2532796..fa15dcb4b12ba 100644 --- a/packages/next/src/server/lib/router-server.ts +++ b/packages/next/src/server/lib/router-server.ts @@ -166,12 +166,6 @@ export async function initialize(opts: { renderServer.instance = require('./render-server') as typeof import('./render-server') - const randomBytes = new Uint8Array(8) - crypto.getRandomValues(randomBytes) - const middlewareSubrequestId = Buffer.from(randomBytes).toString('hex') - ;(globalThis as any)[Symbol.for('@next/middleware-subrequest-id')] = - middlewareSubrequestId - const requestHandlerImpl: WorkerRequestHandler = async (req, res) => { // internal headers should not be honored by the request handler if (!process.env.NEXT_PRIVATE_TEST_HEADERS) { diff --git a/packages/next/src/server/lib/server-ipc/utils.ts b/packages/next/src/server/lib/server-ipc/utils.ts index 0b82fdb3f8df9..09dee95773625 100644 --- a/packages/next/src/server/lib/server-ipc/utils.ts +++ b/packages/next/src/server/lib/server-ipc/utils.ts @@ -57,16 +57,5 @@ export const filterInternalHeaders = ( if (INTERNAL_HEADERS.includes(header)) { delete headers[header] } - - // If this request didn't origin from this session we filter - // out the "x-middleware-subrequest" header so we don't skip - // middleware incorrectly - if ( - header === 'x-middleware-subrequest' && - headers['x-middleware-subrequest-id'] !== - (globalThis as any)[Symbol.for('@next/middleware-subrequest-id')] - ) { - delete headers['x-middleware-subrequest'] - } } } diff --git a/packages/next/src/server/web/sandbox/context.ts b/packages/next/src/server/web/sandbox/context.ts index 0ee0fbc11dc81..b18b23726d97d 100644 --- a/packages/next/src/server/web/sandbox/context.ts +++ b/packages/next/src/server/web/sandbox/context.ts @@ -362,27 +362,6 @@ Learn More: https://nextjs.org/docs/messages/edge-dynamic-code-evaluation`), init.headers = new Headers(init.headers ?? {}) - // Forward subrequest header from incoming request to outgoing request - const store = requestStore.getStore() - if ( - store?.headers.has('x-middleware-subrequest') && - !init.headers.has('x-middleware-subrequest') - ) { - init.headers.set( - 'x-middleware-subrequest', - store.headers.get('x-middleware-subrequest') ?? '' - ) - } - init.headers.set( - 'x-middleware-subrequest-id', - (globalThis as any)[Symbol.for('@next/middleware-subrequest-id')] - ) - - const prevs = - init.headers.get(`x-middleware-subrequest`)?.split(':') || [] - const value = prevs.concat(options.moduleName).join(':') - init.headers.set('x-middleware-subrequest', value) - if (!init.headers.has('user-agent')) { init.headers.set(`user-agent`, `Next.js Middleware`) } diff --git a/packages/next/src/server/web/sandbox/sandbox.ts b/packages/next/src/server/web/sandbox/sandbox.ts index e1ca75aae7450..3e1784bd8468c 100644 --- a/packages/next/src/server/web/sandbox/sandbox.ts +++ b/packages/next/src/server/web/sandbox/sandbox.ts @@ -93,25 +93,6 @@ export async function getRuntimeContext( export const run = withTaggedErrors(async function runWithTaggedErrors(params) { const runtime = await getRuntimeContext(params) - const subreq = params.request.headers[`x-middleware-subrequest`] - const subrequests = typeof subreq === 'string' ? subreq.split(':') : [] - - const MAX_RECURSION_DEPTH = 5 - const depth = subrequests.reduce( - (acc, curr) => (curr === params.name ? acc + 1 : acc), - 0 - ) - - if (depth >= MAX_RECURSION_DEPTH) { - return { - waitUntil: Promise.resolve(), - response: new runtime.context.Response(null, { - headers: { - 'x-middleware-next': '1', - }, - }), - } - } const edgeFunction: (args: { request: RequestData diff --git a/test/e2e/app-dir/app-routes-subrequests/app-routes-subrequests.test.ts b/test/e2e/app-dir/app-routes-subrequests/app-routes-subrequests.test.ts deleted file mode 100644 index eeec56e0fb53a..0000000000000 --- a/test/e2e/app-dir/app-routes-subrequests/app-routes-subrequests.test.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { nextTestSetup } from 'e2e-utils' - -const bathPath = process.env.BASE_PATH ?? '' - -describe('app-routes-subrequests', () => { - const { next, skipped } = nextTestSetup({ - files: __dirname, - skipDeployment: true, - }) - - if (skipped) { - return - } - - it('shortcuts after 5 subrequests', async () => { - expect(JSON.parse(await next.render(bathPath + '/'))).toEqual({ - count: 5, - }) - }) -}) diff --git a/test/e2e/app-dir/app-routes-subrequests/app/route.ts b/test/e2e/app-dir/app-routes-subrequests/app/route.ts deleted file mode 100644 index f083b407ad2cb..0000000000000 --- a/test/e2e/app-dir/app-routes-subrequests/app/route.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NextRequest, NextResponse } from 'next/server' - -export const runtime = 'edge' - -let count = 0 - -export const GET = async (req: NextRequest) => { - await fetch(req.nextUrl) - count++ - return NextResponse.json({ count }) -} diff --git a/test/e2e/app-dir/app-routes-subrequests/next.config.js b/test/e2e/app-dir/app-routes-subrequests/next.config.js deleted file mode 100644 index d54bad4c24cbe..0000000000000 --- a/test/e2e/app-dir/app-routes-subrequests/next.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @type {import('next').NextConfig} - */ -const config = { - typescript: { - ignoreBuildErrors: true, - }, -} - -module.exports = config diff --git a/test/e2e/middleware-general/test/index.test.ts b/test/e2e/middleware-general/test/index.test.ts index 7e50d4386ee07..00977bbbedc22 100644 --- a/test/e2e/middleware-general/test/index.test.ts +++ b/test/e2e/middleware-general/test/index.test.ts @@ -144,19 +144,6 @@ describe('Middleware Runtime', () => { } } - it('should filter request header properly', async () => { - const res = await next.fetch('/redirect-to-somewhere', { - headers: { - 'x-middleware-subrequest': - 'middleware:middleware:middleware:middleware:middleware', - }, - redirect: 'manual', - }) - - expect(res.status).toBe(307) - expect(res.headers.get('location')).toContain('/somewhere') - }) - it('should handle 404 on fallback: false route correctly', async () => { const res = await next.fetch('/ssg-fallback-false/first') expect(res.status).toBe(200)