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

Sign up
Appearance settings

Commit 5489c0d

Browse files
authored
fix: address edge can read request body failures (#2890)
* fix: address edge can read request body failures * fix: apply multiple body reads patch to rewrite case
1 parent a9f4792 commit 5489c0d

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

‎edge-runtime/lib/response.ts

Lines changed: 17 additions & 19 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=awaitcloneRequest(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 = newRequest(target, request)
198+
const newRequest = awaitcloneRequest(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 = newRequest(request)
232+
const newRequest = awaitcloneRequest(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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /