diff options
author | Feng Yu <f3n67u@gmail.com> | 2021-08-02 17:19:21 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-02 02:19:21 -0700 |
commit | f87aa44d94240327fb4ab1dc756d70f71247edb4 (patch) | |
tree | 6ec2bef85c980fe5f5102bc36f83c3bbe69bc91c | |
parent | ecb4c9492f83b4d4a13fa098aeea2cbf1d03aad8 (diff) |
fix(extensions/fetch): Add Origin header to outgoing requests for fetch (#11557)
-rw-r--r-- | cli/tests/unit/fetch_test.ts | 4 | ||||
-rw-r--r-- | extensions/fetch/26_fetch.js | 13 | ||||
-rw-r--r-- | 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 45ab2d12c..1b307b98d 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 f7166001e..f6cfced14 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 dc33d70de..b09cbf34c 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": [ |