summaryrefslogtreecommitdiff
path: root/extensions/fetch/26_fetch.js
diff options
context:
space:
mode:
authorYasser A.Idrissi <spookyframework@gmail.com>2021-06-18 10:14:14 +0100
committerGitHub <noreply@github.com>2021-06-18 11:14:14 +0200
commit0cbaeca026a7d79a57c859e5e395f0d998fab5d1 (patch)
tree89f713c27566a0ccc2517921cbf381425908dafe /extensions/fetch/26_fetch.js
parent419fe2e6b4b77fbc97dee67eaa32a420accb8cfc (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.js23
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;