diff options
author | Yasser A.Idrissi <spookyframework@gmail.com> | 2021-06-18 10:14:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-18 11:14:14 +0200 |
commit | 0cbaeca026a7d79a57c859e5e395f0d998fab5d1 (patch) | |
tree | 89f713c27566a0ccc2517921cbf381425908dafe /extensions/fetch/26_fetch.js | |
parent | 419fe2e6b4b77fbc97dee67eaa32a420accb8cfc (diff) |
fix: fetch with method HEAD should not have body (#11003)
Diffstat (limited to 'extensions/fetch/26_fetch.js')
-rw-r--r-- | extensions/fetch/26_fetch.js | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/extensions/fetch/26_fetch.js b/extensions/fetch/26_fetch.js index cf336f7a5..d1fd1e9b3 100644 --- a/extensions/fetch/26_fetch.js +++ b/extensions/fetch/26_fetch.js @@ -148,6 +148,7 @@ async function mainFetch(req, recursive, terminator) { /** @type {ReadableStream<Uint8Array> | Uint8Array | null} */ let reqBody = null; + if (req.body !== null) { if (req.body.streamOrStatic instanceof ReadableStream) { if (req.body.length === null) { @@ -269,9 +270,14 @@ if (nullBodyStatus(response.status)) { core.close(resp.responseRid); } else { - response.body = new InnerBody( - createResponseBodyStream(resp.responseRid, terminator), - ); + if (req.method === "HEAD" || req.method === "OPTIONS") { + response.body = null; + core.close(resp.responseRid); + } else { + response.body = new InnerBody( + createResponseBodyStream(resp.responseRid, terminator), + ); + } } if (recursive) return response; @@ -289,8 +295,9 @@ * @returns {Promise<InnerResponse>} */ function httpRedirectFetch(request, response, terminator) { - const locationHeaders = response.headerList - .filter((entry) => entry[0] === "location"); + const locationHeaders = response.headerList.filter( + (entry) => entry[0] === "location", + ); if (locationHeaders.length === 0) { return response; } @@ -309,7 +316,8 @@ } request.redirectCount++; if ( - response.status !== 303 && request.body !== null && + response.status !== 303 && + request.body !== null && request.body.source === null ) { return networkError( @@ -320,7 +328,8 @@ ((response.status === 301 || response.status === 302) && request.method === "POST") || (response.status === 303 && - (request.method !== "GET" && request.method !== "HEAD")) + request.method !== "GET" && + request.method !== "HEAD") ) { request.method = "GET"; request.body = null; |