-
Notifications
You must be signed in to change notification settings - Fork 27.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: Merge link
header from middleware with the ones from React
#73431
base: canary
Are you sure you want to change the base?
Conversation
key: string, | ||
value: string | string[] | ||
) => { | ||
if (key === 'link' && res.getHeader(key)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've currently applied the behavior for merging header values only for link
. That's the only one I've encountered the issue with so far and it also seems to be the only one that React sets currently.
Allow CI Workflow Run
Note: this should only be enabled once the PR is ready to go and can only be enabled by a maintainer |
Failing test suitesCommit: 4e9b024
Expand output● persistent-caching › should persistent cache loaders
Read more about building and testing Next.js in contributing.md.
Expand output● Error overlay for hydration errors in App router › should only show one hydration error when bad nesting happened - p under p
● Error overlay for hydration errors in App router › should collapse and uncollapse properly when there are many frames
Read more about building and testing Next.js in contributing.md.
Expand output● app-dir action handling › should forward action request to a worker that contains the action handler (node)
● app-dir action handling › fetch actions › should handle redirects to routes that provide an invalid RSC response
Read more about building and testing Next.js in contributing.md. |
Stats from current PRDefault Build (Increase detected
|
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
buildDuration | 19.1s | 16.3s | N/A |
buildDurationCached | 15.4s | 13s | N/A |
nodeModulesSize | 416 MB | 416 MB | |
nextStartRea..uration (ms) | 456ms | 452ms | N/A |
Client Bundles (main, webpack)
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
1187-HASH.js gzip | 52.4 kB | 52.4 kB | N/A |
8276.HASH.js gzip | 169 B | 168 B | N/A |
8377-HASH.js gzip | 5.36 kB | 5.36 kB | N/A |
bccd1874-HASH.js gzip | 52.8 kB | 52.8 kB | N/A |
framework-HASH.js gzip | 57.5 kB | 57.5 kB | N/A |
main-app-HASH.js gzip | 233 B | 235 B | N/A |
main-HASH.js gzip | 34.1 kB | 34.1 kB | N/A |
webpack-HASH.js gzip | 1.71 kB | 1.71 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Legacy Client Bundles (polyfills)
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
polyfills-HASH.js gzip | 39.4 kB | 39.4 kB | ✓ |
Overall change | 39.4 kB | 39.4 kB | ✓ |
Client Pages
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
_app-HASH.js gzip | 193 B | 193 B | ✓ |
_error-HASH.js gzip | 193 B | 193 B | ✓ |
amp-HASH.js gzip | 512 B | 510 B | N/A |
css-HASH.js gzip | 343 B | 342 B | N/A |
dynamic-HASH.js gzip | 1.84 kB | 1.84 kB | ✓ |
edge-ssr-HASH.js gzip | 265 B | 265 B | ✓ |
head-HASH.js gzip | 363 B | 362 B | N/A |
hooks-HASH.js gzip | 393 B | 392 B | N/A |
image-HASH.js gzip | 4.49 kB | 4.49 kB | N/A |
index-HASH.js gzip | 268 B | 268 B | ✓ |
link-HASH.js gzip | 2.35 kB | 2.34 kB | N/A |
routerDirect..HASH.js gzip | 328 B | 328 B | ✓ |
script-HASH.js gzip | 397 B | 397 B | ✓ |
withRouter-HASH.js gzip | 323 B | 326 B | N/A |
1afbb74e6ecf..834.css gzip | 106 B | 106 B | ✓ |
Overall change | 3.59 kB | 3.59 kB | ✓ |
Client Build Manifests
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
_buildManifest.js gzip | 749 B | 746 B | N/A |
Overall change | 0 B | 0 B | ✓ |
Rendered Page Sizes
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
index.html gzip | 523 B | 524 B | N/A |
link.html gzip | 538 B | 538 B | ✓ |
withRouter.html gzip | 519 B | 521 B | N/A |
Overall change | 538 B | 538 B | ✓ |
Edge SSR bundle Size
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
edge-ssr.js gzip | 128 kB | 128 kB | N/A |
page.js gzip | 206 kB | 206 kB | N/A |
Overall change | 0 B | 0 B | ✓ |
Middleware size
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
middleware-b..fest.js gzip | 668 B | 666 B | N/A |
middleware-r..fest.js gzip | 155 B | 156 B | N/A |
middleware.js gzip | 31.2 kB | 31.2 kB | N/A |
edge-runtime..pack.js gzip | 844 B | 844 B | ✓ |
Overall change | 844 B | 844 B | ✓ |
Next Runtimes
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
274-experime...dev.js gzip | 322 B | 322 B | ✓ |
274.runtime.dev.js gzip | 314 B | 314 B | ✓ |
app-page-exp...dev.js gzip | 359 kB | 359 kB | N/A |
app-page-exp..prod.js gzip | 129 kB | 129 kB | N/A |
app-page-tur..prod.js gzip | 142 kB | 142 kB | N/A |
app-page-tur..prod.js gzip | 137 kB | 137 kB | N/A |
app-page.run...dev.js gzip | 347 kB | 347 kB | N/A |
app-page.run..prod.js gzip | 125 kB | 125 kB | N/A |
app-route-ex...dev.js gzip | 37.5 kB | 37.5 kB | ✓ |
app-route-ex..prod.js gzip | 25.5 kB | 25.5 kB | ✓ |
app-route-tu..prod.js gzip | 25.5 kB | 25.5 kB | ✓ |
app-route-tu..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
app-route.ru...dev.js gzip | 39.2 kB | 39.2 kB | ✓ |
app-route.ru..prod.js gzip | 25.4 kB | 25.4 kB | ✓ |
pages-api-tu..prod.js gzip | 9.69 kB | 9.69 kB | ✓ |
pages-api.ru...dev.js gzip | 11.6 kB | 11.6 kB | ✓ |
pages-api.ru..prod.js gzip | 9.68 kB | 9.68 kB | ✓ |
pages-turbo...prod.js gzip | 21.7 kB | 21.7 kB | ✓ |
pages.runtim...dev.js gzip | 27.5 kB | 27.5 kB | ✓ |
pages.runtim..prod.js gzip | 21.7 kB | 21.7 kB | ✓ |
server.runti..prod.js gzip | 916 kB | 916 kB | ✓ |
Overall change | 1.2 MB | 1.2 MB | ✓ |
build cache Overall increase ⚠️
vercel/next.js canary | amannn/next.js fix/link-middleware | Change | |
---|---|---|---|
0.pack gzip | 2.08 MB | 2.08 MB | N/A |
index.pack gzip | 73 kB | 73.7 kB | |
Overall change | 73 kB | 73.7 kB |
Diff details
Diff for main-HASH.js
Diff too large to display
Diff for app-page-exp..ntime.dev.js
Diff too large to display
Diff for app-page-exp..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page-tur..time.prod.js
Diff too large to display
Diff for app-page.runtime.dev.js
Diff too large to display
Diff for app-page.runtime.prod.js
Diff too large to display
@amannn It looks like we need to update the test in the comment above mine |
@amannn New conflicts again |
# Conflicts: # packages/next/src/server/app-render/app-render.tsx
@samcx Tests are passing! 🎉 |
@samcx Any chance you could consider this PR for being merged? You have quite a busy |
@samcx Sorry to bother you again, is there something missing in this PR or could it be merged? |
@amannn Sorry I haven't able to take a look yet—let me take a look now! |
@@ -1634,7 +1651,9 @@ async function renderToStream( | |||
|
|||
let reactServerResult: null | ReactServerResult = null | |||
|
|||
const setHeader = res.setHeader.bind(res) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
we can just use res.appendHeader
insteads for React's onHeaders callback. I'd remove the other changes. appending is not always useful. for instance it doesn't make sense for location. If you want to resubmit the PR with just appendHeader
for the onHeaders callback I think we can merge quickly
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Many thanks for the review @gnoff!
I've refactored the fix to use res.appendHeader
now instead and reverted the other changes (51fd66b).
I've extracted the part of setting metadata.headers
to a shared function to be used for both setHeader
and appendHeader
—hope that makes sense!
Let me know if there's something else left to do! I've also enabled edits by maintainers if there's something quick you'd like to adjust.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some seemingly unrelated tests failed in the last CI run (example), any chance the tests are a bit flaky?
Fixes #69000