From 5cc3dbf8d085ca7964a266ad05ee9e5a9f3cc55e Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 17 Oct 2024 18:22:41 +0200 Subject: [PATCH 1/5] add: poweredByHeader can hide x-opennext header from server requests --- packages/open-next/src/core/routing/util.ts | 6 ++++-- packages/open-next/src/types/next-types.ts | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/open-next/src/core/routing/util.ts b/packages/open-next/src/core/routing/util.ts index 498a974a5..08084f6d8 100644 --- a/packages/open-next/src/core/routing/util.ts +++ b/packages/open-next/src/core/routing/util.ts @@ -2,7 +2,7 @@ import crypto from "node:crypto"; import { OutgoingHttpHeaders } from "node:http"; import { Readable } from "node:stream"; -import { BuildId, HtmlPages } from "config/index.js"; +import { BuildId, HtmlPages, NextConfig } from "config/index.js"; import type { IncomingMessage, StreamCreator } from "http/index.js"; import { OpenNextNodeResponse } from "http/openNextResponse.js"; import { parseHeaders } from "http/util.js"; @@ -322,7 +322,9 @@ export function fixSWRCacheHeader(headers: OutgoingHttpHeaders) { * @__PURE__ */ export function addOpenNextHeader(headers: OutgoingHttpHeaders) { - headers["X-OpenNext"] = "1"; + if (NextConfig.poweredByHeader) { + headers["X-OpenNext"] = "1"; + } if (globalThis.openNextDebug) { headers["X-OpenNext-Version"] = globalThis.openNextVersion; headers["X-OpenNext-RequestId"] = globalThis.__als.getStore()?.requestId; diff --git a/packages/open-next/src/types/next-types.ts b/packages/open-next/src/types/next-types.ts index 8a5aa5c7a..b9640528d 100644 --- a/packages/open-next/src/types/next-types.ts +++ b/packages/open-next/src/types/next-types.ts @@ -75,6 +75,7 @@ export interface NextConfig { appDir?: boolean; }; images: ImageConfig; + poweredByHeader?: boolean; } export interface RouteDefinition { From db9f3316a77b5942ad6bb1fc832e402142fac05b Mon Sep 17 00:00:00 2001 From: magnus Date: Thu, 17 Oct 2024 18:39:50 +0200 Subject: [PATCH 2/5] add e2e test --- examples/pages-router/next.config.js | 1 + packages/tests-e2e/tests/appRouter/headers.test.ts | 4 ++++ .../tests-e2e/tests/pagesRouter/header.test.ts | 14 ++++++++++++++ 3 files changed, 19 insertions(+) create mode 100644 packages/tests-e2e/tests/pagesRouter/header.test.ts diff --git a/examples/pages-router/next.config.js b/examples/pages-router/next.config.js index 98e1bb953..5e3af8c9d 100644 --- a/examples/pages-router/next.config.js +++ b/examples/pages-router/next.config.js @@ -53,6 +53,7 @@ const nextConfig = { }, ], trailingSlash: true, + poweredByHeader: true, }; module.exports = nextConfig; diff --git a/packages/tests-e2e/tests/appRouter/headers.test.ts b/packages/tests-e2e/tests/appRouter/headers.test.ts index 96f6512d4..192918a58 100644 --- a/packages/tests-e2e/tests/appRouter/headers.test.ts +++ b/packages/tests-e2e/tests/appRouter/headers.test.ts @@ -20,4 +20,8 @@ test("Headers", async ({ page }) => { // Request header should be available in RSC let el = page.getByText(`request-header`); await expect(el).toBeVisible(); + + // Both these headers should not be present cause poweredByHeader is false in appRouter + expect(headers["x-powered-by"]).toBeFalsy(); + expect(headers["x-opennext"]).toBeFalsy(); }); diff --git a/packages/tests-e2e/tests/pagesRouter/header.test.ts b/packages/tests-e2e/tests/pagesRouter/header.test.ts new file mode 100644 index 000000000..e528bc194 --- /dev/null +++ b/packages/tests-e2e/tests/pagesRouter/header.test.ts @@ -0,0 +1,14 @@ +import { expect, test } from "@playwright/test"; + +test("should test if poweredByHeader adds the correct headers ", async ({ + page, +}) => { + const result = await page.goto("/"); + expect(result).toBeDefined(); + expect(result?.status()).toBe(200); + const headers = result?.headers(); + + // Both these headers should be present cause poweredByHeader is true in pagesRouter + expect(headers?.["x-powered-by"]).toBe("Next.js"); + expect(headers?.["x-opennext"]).toBe("1"); +}); From 8cbd7332cbacd5987249e4bbf04af058c34ea559 Mon Sep 17 00:00:00 2001 From: magnus Date: Fri, 18 Oct 2024 12:22:11 +0200 Subject: [PATCH 3/5] add changeset --- packages/open-next/.changeset/tame-taxis-buy.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 packages/open-next/.changeset/tame-taxis-buy.md diff --git a/packages/open-next/.changeset/tame-taxis-buy.md b/packages/open-next/.changeset/tame-taxis-buy.md new file mode 100644 index 000000000..e1343bf3c --- /dev/null +++ b/packages/open-next/.changeset/tame-taxis-buy.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +Hides the x-opennext header from server requests when poweredByHeader is false in next config From 7b629be3e7623c29659c92e2a02d3b99bd5aebd4 Mon Sep 17 00:00:00 2001 From: magnus Date: Fri, 18 Oct 2024 12:24:58 +0200 Subject: [PATCH 4/5] Revert "add changeset" This reverts commit 8cbd7332cbacd5987249e4bbf04af058c34ea559. --- packages/open-next/.changeset/tame-taxis-buy.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 packages/open-next/.changeset/tame-taxis-buy.md diff --git a/packages/open-next/.changeset/tame-taxis-buy.md b/packages/open-next/.changeset/tame-taxis-buy.md deleted file mode 100644 index e1343bf3c..000000000 --- a/packages/open-next/.changeset/tame-taxis-buy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@opennextjs/aws": patch ---- - -Hides the x-opennext header from server requests when poweredByHeader is false in next config From 5ef257e42889bd9d7469022f62498c56fcdf1e6b Mon Sep 17 00:00:00 2001 From: magnus Date: Fri, 18 Oct 2024 12:25:56 +0200 Subject: [PATCH 5/5] add changeset in the root folder --- .changeset/giant-vans-shop.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/giant-vans-shop.md diff --git a/.changeset/giant-vans-shop.md b/.changeset/giant-vans-shop.md new file mode 100644 index 000000000..e1343bf3c --- /dev/null +++ b/.changeset/giant-vans-shop.md @@ -0,0 +1,5 @@ +--- +"@opennextjs/aws": patch +--- + +Hides the x-opennext header from server requests when poweredByHeader is false in next config