Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1634c01

Browse filesBrowse files
committed
fix: apply multiple body reads patch to rewrite case
1 parent 0f02b90 commit 1634c01
Copy full SHA for 1634c01

File tree

Expand file treeCollapse file tree

1 file changed

+17
-23
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+17
-23
lines changed

‎edge-runtime/lib/response.ts

Copy file name to clipboardExpand all lines: edge-runtime/lib/response.ts
+17-23Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -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,11 +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.url, {
245-
headers: request.headers,
246-
method: request.method,
247-
body: request.body && !request.bodyUsed ? await request.arrayBuffer() : undefined,
248-
})
232+
const newRequest = await cloneRequest(request.url, request)
249233
const newRequestCookies = mergeMiddlewareCookies(edgeResponse, newRequest)
250234
if (newRequestCookies) {
251235
newRequest.headers.set('Cookie', newRequestCookies)
@@ -288,3 +272,13 @@ function normalizeLocalizedTarget({
288272
}
289273
return targetUrl.toString()
290274
}
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

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.