|
| 1 | +diff --git a/dist/esm/server/lib/patch-set-header.js b/dist/esm/server/lib/patch-set-header.js |
| 2 | +index f2236f7ae222afcb8554267ed295ada59dceee6a..3be146fc8fa48196254d93a8a21c2ceac2596b09 100644 |
| 3 | +--- a/dist/esm/server/lib/patch-set-header.js |
| 4 | ++++ b/dist/esm/server/lib/patch-set-header.js |
| 5 | +@@ -1,3 +1,4 @@ |
| 6 | ++import { validateHeaderValue } from 'node:http'; |
| 7 | + import { getRequestMeta } from '../request-meta'; |
| 8 | + const PATCHED_SET_HEADER = Symbol('next.patchSetHeaderWithCookieSupport'); |
| 9 | + /** |
| 10 | +@@ -20,6 +21,26 @@ const PATCHED_SET_HEADER = Symbol('next.patchSetHeaderWithCookieSupport'); |
| 11 | + if ('headersSent' in res && res.headersSent) { |
| 12 | + return res; |
| 13 | + } |
| 14 | ++ if (name.toLowerCase() === 'vary' && (typeof value === 'string' || Array.isArray(value))) { |
| 15 | ++ validateHeaderValue(name, value); |
| 16 | ++ const fields = []; |
| 17 | ++ const seen = new Set(); |
| 18 | ++ const collect = (candidate)=>{ |
| 19 | ++ const values = Array.isArray(candidate) ? candidate : typeof candidate === 'string' ? [candidate] : []; |
| 20 | ++ for (const entry of values){ |
| 21 | ++ for (const field of entry.split(',')){ |
| 22 | ++ const trimmed = field.trim(); |
| 23 | ++ const normalized = trimmed.toLowerCase(); |
| 24 | ++ if (!trimmed || seen.has(normalized)) continue; |
| 25 | ++ seen.add(normalized); |
| 26 | ++ fields.push(trimmed); |
| 27 | ++ } |
| 28 | ++ } |
| 29 | ++ }; |
| 30 | ++ collect(res.getHeader(name)); |
| 31 | ++ collect(value); |
| 32 | ++ value = seen.has('*') ? '*' : fields.join(', '); |
| 33 | ++ } |
| 34 | + if (name.toLowerCase() === 'set-cookie') { |
| 35 | + const middlewareValue = getRequestMeta(req, 'middlewareCookie'); |
| 36 | + if (!middlewareValue || !Array.isArray(value) || !value.every((item, idx)=>item === middlewareValue[idx])) { |
| 37 | +diff --git a/dist/server/lib/patch-set-header.js b/dist/server/lib/patch-set-header.js |
| 38 | +index 16cdc4703f3e9957a16c68c962cfaf5ee5d04561..a1c3c7061bc917284e01ed9947cd914818cfd708 100644 |
| 39 | +--- a/dist/server/lib/patch-set-header.js |
| 40 | ++++ b/dist/server/lib/patch-set-header.js |
| 41 | +@@ -8,6 +8,7 @@ Object.defineProperty(exports, "patchSetHeaderWithCookieSupport", { |
| 42 | + return patchSetHeaderWithCookieSupport; |
| 43 | + } |
| 44 | + }); |
| 45 | ++const _nodehttp = require("node:http"); |
| 46 | + const _requestmeta = require("../request-meta"); |
| 47 | + const PATCHED_SET_HEADER = Symbol('next.patchSetHeaderWithCookieSupport'); |
| 48 | + function patchSetHeaderWithCookieSupport(req, res) { |
| 49 | +@@ -24,6 +25,26 @@ function patchSetHeaderWithCookieSupport(req, res) { |
| 50 | + if ('headersSent' in res && res.headersSent) { |
| 51 | + return res; |
| 52 | + } |
| 53 | ++ if (name.toLowerCase() === 'vary' && (typeof value === 'string' || Array.isArray(value))) { |
| 54 | ++ (0, _nodehttp.validateHeaderValue)(name, value); |
| 55 | ++ const fields = []; |
| 56 | ++ const seen = new Set(); |
| 57 | ++ const collect = (candidate)=>{ |
| 58 | ++ const values = Array.isArray(candidate) ? candidate : typeof candidate === 'string' ? [candidate] : []; |
| 59 | ++ for (const entry of values){ |
| 60 | ++ for (const field of entry.split(',')){ |
| 61 | ++ const trimmed = field.trim(); |
| 62 | ++ const normalized = trimmed.toLowerCase(); |
| 63 | ++ if (!trimmed || seen.has(normalized)) continue; |
| 64 | ++ seen.add(normalized); |
| 65 | ++ fields.push(trimmed); |
| 66 | ++ } |
| 67 | ++ } |
| 68 | ++ }; |
| 69 | ++ collect(res.getHeader(name)); |
| 70 | ++ collect(value); |
| 71 | ++ value = seen.has('*') ? '*' : fields.join(', '); |
| 72 | ++ } |
| 73 | + if (name.toLowerCase() === 'set-cookie') { |
| 74 | + const middlewareValue = (0, _requestmeta.getRequestMeta)(req, 'middlewareCookie'); |
| 75 | + if (!middlewareValue || !Array.isArray(value) || !value.every((item, idx)=>item === middlewareValue[idx])) { |
0 commit comments