From f2600d95f63733e27ad2a338a01e268b860a0504 Mon Sep 17 00:00:00 2001 From: Nathan Nguyen <146415969+NathanDrake2406@users.noreply.github.com> Date: Fri, 19 Jun 2026 23:31:00 +1000 Subject: [PATCH] perf(server): skip duplicate App RSC vary merge App Router page responses commonly already carry the internal RSC Vary header before response finalization runs. Re-running the generic Vary merge in that case splits and deduplicates the known header value on every SSR response without changing the result. Read the current Vary value first, set the internal header directly when missing, and only fall back to the generic merge path for custom Vary values that still need preservation and deduplication. --- packages/vinext/src/server/app-rsc-response-finalizer.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/vinext/src/server/app-rsc-response-finalizer.ts b/packages/vinext/src/server/app-rsc-response-finalizer.ts index eac5cd0df..227579b72 100644 --- a/packages/vinext/src/server/app-rsc-response-finalizer.ts +++ b/packages/vinext/src/server/app-rsc-response-finalizer.ts @@ -53,7 +53,12 @@ export function finalizeAppRscResponse( } if (!response.headers.has(VINEXT_STATIC_FILE_HEADER)) { - mergeVaryHeader(response.headers, VINEXT_RSC_VARY_HEADER); + const varyHeader = response.headers.get("Vary"); + if (varyHeader === null) { + response.headers.set("Vary", VINEXT_RSC_VARY_HEADER); + } else if (varyHeader !== VINEXT_RSC_VARY_HEADER) { + mergeVaryHeader(response.headers, VINEXT_RSC_VARY_HEADER); + } } // The CDN cache adapter owns the *default* Cache-Control. If no route path