From f87aa44d94240327fb4ab1dc756d70f71247edb4 Mon Sep 17 00:00:00 2001 From: Feng Yu Date: Mon, 2 Aug 2021 17:19:21 +0800 Subject: [PATCH] fix(extensions/fetch): Add Origin header to outgoing requests for fetch (#11557) --- cli/tests/unit/fetch_test.ts | 4 ++++ extensions/fetch/26_fetch.js | 13 +++++++++++++ tools/wpt/expectation.json | 21 +-------------------- 3 files changed, 18 insertions(+), 20 deletions(-) diff --git a/cli/tests/unit/fetch_test.ts b/cli/tests/unit/fetch_test.ts index 45ab2d12cb..1b307b98d1 100644 --- a/cli/tests/unit/fetch_test.ts +++ b/cli/tests/unit/fetch_test.ts @@ -677,6 +677,7 @@ unitTest( "POST /blah HTTP/1.1\r\n", "hello: World\r\n", "foo: Bar\r\n", + "origin: http://js-unit-tests\r\n", "accept: */*\r\n", `user-agent: Deno/${Deno.version.deno}\r\n`, "accept-encoding: gzip, br\r\n", @@ -712,6 +713,7 @@ unitTest( "hello: World\r\n", "foo: Bar\r\n", "content-type: text/plain;charset=UTF-8\r\n", + "origin: http://js-unit-tests\r\n", "accept: */*\r\n", `user-agent: Deno/${Deno.version.deno}\r\n`, "accept-encoding: gzip, br\r\n", @@ -749,6 +751,7 @@ unitTest( "POST /blah HTTP/1.1\r\n", "hello: World\r\n", "foo: Bar\r\n", + "origin: http://js-unit-tests\r\n", "accept: */*\r\n", `user-agent: Deno/${Deno.version.deno}\r\n`, "accept-encoding: gzip, br\r\n", @@ -1128,6 +1131,7 @@ unitTest( "POST /blah HTTP/1.1\r\n", "hello: World\r\n", "foo: Bar\r\n", + "origin: http://js-unit-tests\r\n", "accept: */*\r\n", `user-agent: Deno/${Deno.version.deno}\r\n`, "accept-encoding: gzip, br\r\n", diff --git a/extensions/fetch/26_fetch.js b/extensions/fetch/26_fetch.js index f7166001e4..f6cfced140 100644 --- a/extensions/fetch/26_fetch.js +++ b/extensions/fetch/26_fetch.js @@ -40,6 +40,8 @@ TypeError, Uint8Array, } = window.__bootstrap.primordials; + const { getLocationHref } = window.__bootstrap.location; + const { URL } = window.__bootstrap.url; const REQUEST_BODY_HEADER_NAMES = [ "content-encoding", @@ -429,6 +431,17 @@ } requestObject.signal[abortSignal.add](onabort); + const baseURL = getLocationHref(); + if ( + baseURL && + (requestObject.method !== "GET" && requestObject.method !== "HEAD") + ) { + ArrayPrototypePush(request.headerList, [ + "origin", + new URL(baseURL).origin, + ]); + } + if (!requestObject.headers.has("accept")) { ArrayPrototypePush(request.headerList, ["accept", "*/*"]); } diff --git a/tools/wpt/expectation.json b/tools/wpt/expectation.json index dc33d70dea..b09cbf34c0 100644 --- a/tools/wpt/expectation.json +++ b/tools/wpt/expectation.json @@ -2646,26 +2646,7 @@ "request-headers-nonascii.any.html": true, "request-headers.any.html": [ "Fetch with PUT without body", - "Fetch with PUT with body", - "Fetch with POST without body", - "Fetch with POST with text body", - "Fetch with POST with FormData body", - "Fetch with POST with URLSearchParams body", - "Fetch with POST with Blob body", - "Fetch with POST with ArrayBuffer body", - "Fetch with POST with Uint8Array body", - "Fetch with POST with Int8Array body", - "Fetch with POST with Float32Array body", - "Fetch with POST with Float64Array body", - "Fetch with POST with DataView body", - "Fetch with POST with Blob body with mime type", - "Fetch with Chicken", - "Fetch with Chicken with body", - "Fetch with POST and mode \"same-origin\" needs an Origin header", - "Fetch with POST and mode \"no-cors\" needs an Origin header", - "Fetch with PUT and mode \"same-origin\" needs an Origin header", - "Fetch with TacO and mode \"same-origin\" needs an Origin header", - "Fetch with TacO and mode \"cors\" needs an Origin header" + "Fetch with POST without body" ], "text-utf8.any.html": true, "accept-header.any.html": [