diff --git a/packages/next/server/next-server.ts b/packages/next/server/next-server.ts index 034a7ddfc49e1..2e70751087552 100644 --- a/packages/next/server/next-server.ts +++ b/packages/next/server/next-server.ts @@ -700,7 +700,9 @@ export default class Server { }) for (let [key, value] of result.response.headers) { - allHeaders.append(key, value) + if (key !== 'x-middleware-next') { + allHeaders.append(key, value) + } } if (!this.renderOpts.dev) { diff --git a/test/integration/middleware/core/pages/responses/deep/_middleware.js b/test/integration/middleware/core/pages/responses/deep/_middleware.js index 1e9a129cc9bb9..37d9dbe0521b5 100644 --- a/test/integration/middleware/core/pages/responses/deep/_middleware.js +++ b/test/integration/middleware/core/pages/responses/deep/_middleware.js @@ -1,6 +1,9 @@ import { NextResponse } from 'next/server' export async function middleware(request, _event) { + if (request.nextUrl.searchParams.get('deep-intercept') === 'true') { + return new NextResponse('intercepted!') + } const next = NextResponse.next() next.headers.set('x-deep-header', 'valid') next.headers.append('x-append-me', 'deep') diff --git a/test/integration/middleware/core/test/index.test.js b/test/integration/middleware/core/test/index.test.js index 5fbebabe8e12d..472cf23d59394 100644 --- a/test/integration/middleware/core/test/index.test.js +++ b/test/integration/middleware/core/test/index.test.js @@ -341,6 +341,14 @@ function responseTests(locale = '') { 'foo=oatmeal', ]) }) + + it(`${locale} should be intercepted by deep middleware`, async () => { + const res = await fetchViaHTTP( + context.appPort, + `${locale}/responses/deep?deep-intercept=true` + ) + expect(await res.text()).toBe('intercepted!') + }) } function interfaceTests(locale = '') {