Skip to content

Fix invalid HTML response for route-level RSC requests in deployment adapter#91541

Merged
ztanner merged 2 commits into
canaryfrom
03-17-fix_invalid_html_response_for_route-level_rsc_requests_in_deployment_adapter
Mar 18, 2026
Merged

Fix invalid HTML response for route-level RSC requests in deployment adapter#91541
ztanner merged 2 commits into
canaryfrom
03-17-fix_invalid_html_response_for_route-level_rsc_requests_in_deployment_adapter

Conversation

@ztanner

@ztanner ztanner commented Mar 17, 2026

Copy link
Copy Markdown
Member

In a deployed environment, onCacheEntryV2 determines whether a postponed response is HTML-origin or RSC-origin by checking whether meta.url ends with .rsc.

For some dynamic full-route RSC requests, Next was passing a URL with query params into onCacheEntry, for example: /[tenant]/samples.rsc?nxtPtenant=tenant-x

Because that string does not end with .rsc, onCacheEntryV2 misclassified the request as HTML and treated it as text/html instead of an RSC response.

This PR normalizes the URL before passing it to onCacheEntry, so the callback receives the pathname rather than the full URL-with-query.

@nextjs-bot nextjs-bot added created-by: Next.js team PRs by the Next.js team. tests labels Mar 17, 2026

ztanner commented Mar 17, 2026

Copy link
Copy Markdown
Member Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@nextjs-bot

nextjs-bot commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

Tests Passed

@nextjs-bot

Copy link
Copy Markdown
Contributor

Stats from current PR

🔴 3 regressions

Metric Canary PR Change Trend
Warm (Listen) 913ms 1.116s 🔴 +203ms (+22%) ▁▁▁▁▇
nextDevWarmR..urationTurbo 907ms 1.108s 🔴 +201ms (+22%) ▁▁▁▁▇
Warm (First Request) 702ms 814ms 🔴 +112ms (+16%) ▁▁▁▂▇
📊 All Metrics
📖 Metrics Glossary

Dev Server Metrics:

  • Listen = TCP port starts accepting connections
  • First Request = HTTP server returns successful response
  • Cold = Fresh build (no cache)
  • Warm = With cached build artifacts

Build Metrics:

  • Fresh = Clean build (no .next directory)
  • Cached = With existing .next directory

Change Thresholds:

  • Time: Changes < 50ms AND < 10%, OR < 2% are insignificant
  • Size: Changes < 1KB AND < 1% are insignificant
  • All other changes are flagged to catch regressions

⚡ Dev Server

Metric Canary PR Change Trend
Cold (Listen) 1.016s 1.064s ▁▁▁▁▇
Cold (Ready in log) 973ms 1.028s ▁▁▁▁▇
Cold (First Request) 1.750s 1.724s ▁▁▁▂▇
Warm (Listen) 913ms 1.116s 🔴 +203ms (+22%) ▁▁▁▁▇
Warm (Ready in log) 907ms 1.108s 🔴 +201ms (+22%) ▁▁▁▁▇
Warm (First Request) 702ms 814ms 🔴 +112ms (+16%) ▁▁▁▂▇
📦 Dev Server (Webpack) (Legacy)

📦 Dev Server (Webpack)

Metric Canary PR Change Trend
Cold (Listen) 455ms 455ms █▁▁▁▁
Cold (Ready in log) 437ms 438ms █▁▃▂▂
Cold (First Request) 1.948s 1.952s █▁▂▁▂
Warm (Listen) 456ms 456ms █▁▁▁▁
Warm (Ready in log) 439ms 438ms █▁▃▂▃
Warm (First Request) 1.962s 1.961s █▁▁▁▁

⚡ Production Builds

Metric Canary PR Change Trend
Fresh Build 7.675s 7.339s ▁▁▁▁▇
Cached Build 7.398s 7.572s ▁▁▁▁▇
📦 Production Builds (Webpack) (Legacy)

📦 Production Builds (Webpack)

Metric Canary PR Change Trend
Fresh Build 14.456s 14.398s █▁▁▁▁
Cached Build 14.542s 14.546s █▁▁▁▁
node_modules Size 483 MB 483 MB ▁▁▁▁▁
📦 Bundle Sizes

Bundle Sizes

⚡ Turbopack

Client

Main Bundles
Canary PR Change
0~lwfcrlb4v_9.css gzip 115 B 115 B
00h0nz7r436~l.js gzip 13.3 kB N/A -
019g6dx8~tg3j.js gzip 12.9 kB N/A -
02ku7edzc_wf7.js gzip 450 B N/A -
03_qn3jc.c.if.js gzip 155 B N/A -
03~yq9q893hmn.js gzip 39.4 kB 39.4 kB
05p.v~a0idamf.js gzip 157 B N/A -
08akqyn9tddop.js gzip 155 B N/A -
08wow2p6zxy.b.js gzip 7.61 kB N/A -
092lcb3fqrrf9.js gzip 8.52 kB N/A -
096ojkggp1~uj.js gzip 170 B N/A -
0aj~xs1l1g8tg.js gzip 8.53 kB N/A -
0eg78sqvyqa0_.js gzip 13.7 kB N/A -
0f_0g.cp~pme-.js gzip 70.8 kB N/A -
0fa4llft9~nu8.js gzip 158 B N/A -
0h35gmp9u328z.js gzip 8.54 kB N/A -
0h6fkavebp.iz.js gzip 8.47 kB N/A -
0hzbjw9lvv3tg.js gzip 155 B N/A -
0i66_d4nicbyo.js gzip 157 B N/A -
0ino_yf1k3h6k.js gzip 10.4 kB N/A -
0macv4tje3an9.js gzip 159 B N/A -
0moy~uao4dl.m.js gzip 9.19 kB N/A -
0q50rtpusjy90.js gzip 2.28 kB N/A -
0smgy2grrrlka.js gzip 8.58 kB N/A -
0t1dzhdfh0txh.js gzip 215 B 215 B
0vt7pofxnk8in.js gzip 10.1 kB N/A -
0zid7o0-vupvp.js gzip 225 B N/A -
0znvdan0rv.1l.js gzip 158 B N/A -
11yo3xfd6b147.js gzip 12.9 kB N/A -
12h1p.vvy5dpn.js gzip 161 B N/A -
13.84hqxl_1p7.js gzip 9.76 kB N/A -
14_hwphcs58-s.js gzip 48.6 kB N/A -
150hov40y-e20.js gzip 65.7 kB N/A -
1554wr-t7p6z-.js gzip 8.55 kB N/A -
15i08xky7obk7.js gzip 159 B N/A -
15tjst79~qy3_.js gzip 1.46 kB N/A -
15z_v00ne4ud0.js gzip 8.47 kB N/A -
16djs0hsbzb3o.js gzip 156 B N/A -
17d_m3p4j9w6r.js gzip 5.62 kB N/A -
17waezdu~7dop.js gzip 162 B N/A -
17yu~3yiu7d2m.js gzip 8.52 kB N/A -
turbopack-0-..5od2.js gzip 4.16 kB N/A -
turbopack-0-..v0~j.js gzip 4.16 kB N/A -
turbopack-0-..ydx2.js gzip 4.16 kB N/A -
turbopack-0...0yh5.js gzip 4.16 kB N/A -
turbopack-0~..rwxr.js gzip 4.16 kB N/A -
turbopack-09..ihwe.js gzip 4.17 kB N/A -
turbopack-0a..nvyi.js gzip 4.16 kB N/A -
turbopack-0a..pv9r.js gzip 4.16 kB N/A -
turbopack-0d..uuri.js gzip 4.16 kB N/A -
turbopack-0m..9i3j.js gzip 4.16 kB N/A -
turbopack-0t..1j7i.js gzip 4.16 kB N/A -
turbopack-0u..sbpa.js gzip 4.16 kB N/A -
turbopack-12..w5px.js gzip 4.14 kB N/A -
turbopack-18..7bcg.js gzip 4.16 kB N/A -
0_.49f9yku.5j.js gzip N/A 48.6 kB -
0_cl~bd4xv7qq.js gzip N/A 154 B -
0_zucdt2.9nwv.js gzip N/A 170 B -
02263xhx.kjvl.js gzip N/A 156 B -
03t__~.5lvgeu.js gzip N/A 5.62 kB -
03w5kc0p972.js gzip N/A 153 B -
04d6ll75jqx3r.js gzip N/A 9.19 kB -
0583exyh-yhc7.js gzip N/A 9.76 kB -
06xmhhv667fde.js gzip N/A 65.7 kB -
072lv63r8dcz~.js gzip N/A 8.58 kB -
077ilr~jvv004.js gzip N/A 151 B -
07k6dcww5s4pu.js gzip N/A 13.7 kB -
0ar1~bwpezfgw.js gzip N/A 13.3 kB -
0c99mq1ez2bke.js gzip N/A 450 B -
0cq-cmde_ws6u.js gzip N/A 8.47 kB -
0d6fl17xl662a.js gzip N/A 156 B -
0f8ekbd742vkq.js gzip N/A 155 B -
0fwf102w10o9~.js gzip N/A 8.52 kB -
0gpqla1p8l243.js gzip N/A 70.8 kB -
0gtmn.q_j1v5r.js gzip N/A 10.4 kB -
0h5~v-tahitcf.js gzip N/A 10.1 kB -
0jdxkyht7dcwi.js gzip N/A 157 B -
0nclq9z6yzzm5.js gzip N/A 1.46 kB -
0nzumcogektg7.js gzip N/A 8.55 kB -
0p0z5veb8xigp.js gzip N/A 161 B -
0p88ggrxiy7bp.js gzip N/A 7.6 kB -
0s.c-cn5eebrx.js gzip N/A 8.47 kB -
0tna7lg6q4zne.js gzip N/A 12.9 kB -
0ua-sohqip-~a.js gzip N/A 156 B -
0votdfxr5fb5u.js gzip N/A 2.28 kB -
0w1mey6x9qmjg.js gzip N/A 157 B -
0ykl9bs_qj.5..js gzip N/A 8.52 kB -
0zfen0tnxp4gh.js gzip N/A 8.55 kB -
10wkq1h9jzkg..js gzip N/A 225 B -
13b6l.5jkw.yc.js gzip N/A 155 B -
13bn7vz3qakgv.js gzip N/A 159 B -
149ndfh8zfcaz.js gzip N/A 8.53 kB -
15gkb_10omqgr.js gzip N/A 13 kB -
turbopack-0~..2jf..js gzip N/A 4.16 kB -
turbopack-04..e4fb.js gzip N/A 4.16 kB -
turbopack-06..s-uy.js gzip N/A 4.16 kB -
turbopack-07..7wfu.js gzip N/A 4.16 kB -
turbopack-08.._ybc.js gzip N/A 4.16 kB -
turbopack-09..5v12.js gzip N/A 4.18 kB -
turbopack-0g..72xu.js gzip N/A 4.16 kB -
turbopack-0j..jaid.js gzip N/A 4.16 kB -
turbopack-0l.._yha.js gzip N/A 4.16 kB -
turbopack-0p..t1-w.js gzip N/A 4.14 kB -
turbopack-0p..p6v6.js gzip N/A 4.16 kB -
turbopack-0t..1zpy.js gzip N/A 4.16 kB -
turbopack-10..0qzt.js gzip N/A 4.16 kB -
turbopack-13..esvd.js gzip N/A 4.16 kB -
Total 463 kB 463 kB ✅ -68 B

Server

Middleware
Canary PR Change
middleware-b..fest.js gzip 712 B 712 B
Total 712 B 712 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 432 B 432 B
Total 432 B 432 B

📦 Webpack

Client

Main Bundles
Canary PR Change
5528-HASH.js gzip 5.54 kB N/A -
6280-HASH.js gzip 60.4 kB N/A -
6335.HASH.js gzip 169 B N/A -
912-HASH.js gzip 4.59 kB N/A -
e8aec2e4-HASH.js gzip 62.7 kB N/A -
framework-HASH.js gzip 59.7 kB 59.7 kB
main-app-HASH.js gzip 257 B 253 B 🟢 4 B (-2%)
main-HASH.js gzip 39.2 kB 39.2 kB
webpack-HASH.js gzip 1.68 kB 1.68 kB
262-HASH.js gzip N/A 4.59 kB -
2889.HASH.js gzip N/A 169 B -
5602-HASH.js gzip N/A 5.55 kB -
6948ada0-HASH.js gzip N/A 62.7 kB -
9544-HASH.js gzip N/A 61.1 kB -
Total 234 kB 235 kB ⚠️ +667 B
Polyfills
Canary PR Change
polyfills-HASH.js gzip 39.4 kB 39.4 kB
Total 39.4 kB 39.4 kB
Pages
Canary PR Change
_app-HASH.js gzip 194 B 194 B
_error-HASH.js gzip 183 B 180 B 🟢 3 B (-2%)
css-HASH.js gzip 331 B 330 B
dynamic-HASH.js gzip 1.81 kB 1.81 kB
edge-ssr-HASH.js gzip 256 B 256 B
head-HASH.js gzip 351 B 352 B
hooks-HASH.js gzip 384 B 383 B
image-HASH.js gzip 580 B 581 B
index-HASH.js gzip 260 B 260 B
link-HASH.js gzip 2.51 kB 2.51 kB
routerDirect..HASH.js gzip 320 B 319 B
script-HASH.js gzip 386 B 386 B
withRouter-HASH.js gzip 315 B 315 B
1afbb74e6ecf..834.css gzip 106 B 106 B
Total 7.98 kB 7.98 kB ✅ -1 B

Server

Edge SSR
Canary PR Change
edge-ssr.js gzip 125 kB 125 kB
page.js gzip 269 kB 268 kB
Total 394 kB 393 kB ✅ -295 B
Middleware
Canary PR Change
middleware-b..fest.js gzip 616 B 616 B
middleware-r..fest.js gzip 156 B 155 B
middleware.js gzip 44 kB 43.8 kB
edge-runtime..pack.js gzip 842 B 842 B
Total 45.6 kB 45.4 kB ✅ -204 B
Build Details
Build Manifests
Canary PR Change
_buildManifest.js gzip 715 B 718 B
Total 715 B 718 B ⚠️ +3 B
Build Cache
Canary PR Change
0.pack gzip 4.28 MB 4.27 MB 🟢 6.5 kB (0%)
index.pack gzip 111 kB 110 kB
index.pack.old gzip 109 kB 109 kB
Total 4.5 MB 4.49 MB ✅ -6.61 kB

🔄 Shared (bundler-independent)

Runtimes
Canary PR Change
app-page-exp...dev.js gzip 333 kB 333 kB
app-page-exp..prod.js gzip 181 kB 181 kB
app-page-tur...dev.js gzip 333 kB 333 kB
app-page-tur..prod.js gzip 181 kB 181 kB
app-page-tur...dev.js gzip 329 kB 329 kB
app-page-tur..prod.js gzip 179 kB 179 kB
app-page.run...dev.js gzip 330 kB 330 kB
app-page.run..prod.js gzip 179 kB 179 kB
app-route-ex...dev.js gzip 76 kB 76 kB
app-route-ex..prod.js gzip 51.7 kB 51.7 kB
app-route-tu...dev.js gzip 76 kB 76 kB
app-route-tu..prod.js gzip 51.7 kB 51.7 kB
app-route-tu...dev.js gzip 75.6 kB 75.6 kB
app-route-tu..prod.js gzip 51.5 kB 51.5 kB
app-route.ru...dev.js gzip 75.6 kB 75.6 kB
app-route.ru..prod.js gzip 51.5 kB 51.5 kB
dist_client_...dev.js gzip 324 B 324 B
dist_client_...dev.js gzip 326 B 326 B
dist_client_...dev.js gzip 318 B 318 B
dist_client_...dev.js gzip 317 B 317 B
pages-api-tu...dev.js gzip 43.3 kB 43.4 kB
pages-api-tu..prod.js gzip 33 kB 33 kB
pages-api.ru...dev.js gzip 43.3 kB 43.3 kB
pages-api.ru..prod.js gzip 33 kB 33 kB
pages-turbo....dev.js gzip 52.7 kB 52.7 kB
pages-turbo...prod.js gzip 38.6 kB 38.6 kB
pages.runtim...dev.js gzip 52.7 kB 52.7 kB
pages.runtim..prod.js gzip 38.6 kB 38.6 kB
server.runti..prod.js gzip 62.4 kB 62.4 kB
Total 2.95 MB 2.95 MB ⚠️ +2 B
📝 Changed Files (4 files)

Files with changes:

  • pages-api-tu..ntime.dev.js
  • pages-api-tu..time.prod.js
  • pages-turbo...ntime.dev.js
  • pages-turbo...time.prod.js
View diffs
pages-api-tu..ntime.dev.js

Diff too large to display

pages-api-tu..time.prod.js

Diff too large to display

pages-turbo...ntime.dev.js

Diff too large to display

pages-turbo...time.prod.js

Diff too large to display

📎 Tarball URL
https://vercel-packages.vercel.app/next/commits/1cb4d3b06fdc199b404beabfec517d13abb46fc5/next

@ijjk ijjk marked this pull request as ready for review March 18, 2026 19:12
@ztanner ztanner merged commit 56d75a0 into canary Mar 18, 2026
275 of 280 checks passed
@ztanner ztanner deleted the 03-17-fix_invalid_html_response_for_route-level_rsc_requests_in_deployment_adapter branch March 18, 2026 19:17
@github-actions github-actions Bot added the locked label Apr 2, 2026
@github-actions github-actions Bot locked as resolved and limited conversation to collaborators Apr 2, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants