@@ -163,25 +163,13 @@ export const buildResponse = async ({
163163
164164 if ( rewriteUrl . origin !== baseUrl . origin ) {
165165 logger . withFields ( { rewrite_url : rewrite } ) . debug ( 'Rewriting to external url' )
166- let proxyRequest : Request
166+ const proxyRequest = await cloneRequest ( rewriteUrl , request )
167167
168168 // Remove Netlify internal headers
169- const headers = new Headers (
170- [ ...request . headers . entries ( ) ] . filter ( ( [ key ] ) => ! key . startsWith ( 'x-nf-' ) ) ,
171- )
172- if ( request . body && ! request . bodyUsed ) {
173- // This is not ideal, but streaming to an external URL doesn't work
174- const body = await request . arrayBuffer ( )
175- proxyRequest = new Request ( rewriteUrl , {
176- headers,
177- method : request . method ,
178- body,
179- } )
180- } else {
181- proxyRequest = new Request ( rewriteUrl , {
182- headers,
183- method : request . method ,
184- } )
169+ for ( const key of request . headers . keys ( ) ) {
170+ if ( key . startsWith ( 'x-nf-' ) ) {
171+ proxyRequest . headers . delete ( key )
172+ }
185173 }
186174
187175 return addMiddlewareHeaders ( fetch ( proxyRequest , { redirect : 'manual' } ) , edgeResponse )
@@ -207,7 +195,7 @@ export const buildResponse = async ({
207195 request . headers . set ( 'x-middleware-rewrite' , target )
208196
209197 // coookies set in middleware need to be available during the lambda request
210- const newRequest = new Request ( target , request )
198+ const newRequest = await cloneRequest ( target , request )
211199 const newRequestCookies = mergeMiddlewareCookies ( edgeResponse , newRequest )
212200 if ( newRequestCookies ) {
213201 newRequest . headers . set ( 'Cookie' , newRequestCookies )
@@ -241,7 +229,7 @@ export const buildResponse = async ({
241229 edgeResponse . headers . delete ( 'x-middleware-next' )
242230
243231 // coookies set in middleware need to be available during the lambda request
244- const newRequest = new Request ( request )
232+ const newRequest = await cloneRequest ( request . url , request )
245233 const newRequestCookies = mergeMiddlewareCookies ( edgeResponse , newRequest )
246234 if ( newRequestCookies ) {
247235 newRequest . headers . set ( 'Cookie' , newRequestCookies )
@@ -284,3 +272,13 @@ function normalizeLocalizedTarget({
284272 }
285273 return targetUrl . toString ( )
286274}
275+
276+ async function cloneRequest ( url , request : Request ) {
277+ // This is not ideal, but streaming to an external URL doesn't work
278+ const body = request . body && ! request . bodyUsed ? await request . arrayBuffer ( ) : undefined
279+ return new Request ( url , {
280+ headers : request . headers ,
281+ method : request . method ,
282+ body,
283+ } )
284+ }
0 commit comments