| <!doctype html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <title>Request Headers</title> |
| <meta name="help" href="https://fetch.spec.whatwg.org/#request"> |
| <meta name="author" title="Canon Research France" href="https://www.crf.canon.fr"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| </head> |
| <body> |
| <script> |
| var validRequestHeaders = [ |
| ["Content-Type", "OK"], |
| ["Potato", "OK"], |
| ["proxy", "OK"], |
| ["proxya", "OK"], |
| ["sec", "OK"], |
| ["secb", "OK"], |
| ]; |
| var invalidRequestHeaders = [ |
| ["Accept-Charset", "KO"], |
| ["accept-charset", "KO"], |
| ["ACCEPT-ENCODING", "KO"], |
| ["Accept-Encoding", "KO"], |
| ["Access-Control-Request-Headers", "KO"], |
| ["Access-Control-Request-Method", "KO"], |
| ["Connection", "KO"], |
| ["Content-Length", "KO"], |
| ["Cookie", "KO"], |
| ["Cookie2", "KO"], |
| ["Date", "KO"], |
| ["DNT", "KO"], |
| ["Expect", "KO"], |
| ["Host", "KO"], |
| ["Keep-Alive", "KO"], |
| ["Origin", "KO"], |
| ["Referer", "KO"], |
| ["TE", "KO"], |
| ["Trailer", "KO"], |
| ["Transfer-Encoding", "KO"], |
| ["Upgrade", "KO"], |
| ["Via", "KO"], |
| ["Proxy-", "KO"], |
| ["proxy-a", "KO"], |
| ["Sec-", "KO"], |
| ["sec-b", "KO"], |
| ]; |
| |
| var validRequestNoCorsHeaders = [ |
| ["Accept", "OK"], |
| ["Accept-Language", "OK"], |
| ["content-language", "OK"], |
| ["content-type", "application/x-www-form-urlencoded"], |
| ["content-type", "application/x-www-form-urlencoded;charset=UTF-8"], |
| ["content-type", "multipart/form-data"], |
| ["content-type", "multipart/form-data;charset=UTF-8"], |
| ["content-TYPE", "text/plain"], |
| ["CONTENT-type", "text/plain;charset=UTF-8"], |
| ]; |
| var invalidRequestNoCorsHeaders = [ |
| ["Content-Type", "KO"], |
| ["Potato", "KO"], |
| ["proxy", "KO"], |
| ["proxya", "KO"], |
| ["sec", "KO"], |
| ["secb", "KO"], |
| ]; |
| |
| validRequestHeaders.forEach(function(header) { |
| test(function() { |
| var request = new Request(""); |
| request.headers.set(header[0], header[1]); |
| assert_equals(request.headers.get(header[0]), header[1]); |
| }, "Adding valid request header \"" + header[0] + ": " + header[1] + "\""); |
| }); |
| invalidRequestHeaders.forEach(function(header) { |
| test(function() { |
| var request = new Request(""); |
| request.headers.set(header[0], header[1]); |
| assert_equals(request.headers.get(header[0]), null); |
| }, "Adding invalid request header \"" + header[0] + ": " + header[1] + "\""); |
| }); |
| |
| validRequestNoCorsHeaders.forEach(function(header) { |
| test(function() { |
| var requestNoCors = new Request("", {"mode": "no-cors"}); |
| requestNoCors.headers.set(header[0], header[1]); |
| assert_equals(requestNoCors.headers.get(header[0]), header[1]); |
| }, "Adding valid no-cors request header \"" + header[0] + ": " + header[1] + "\""); |
| }); |
| invalidRequestNoCorsHeaders.forEach(function(header) { |
| test(function() { |
| var requestNoCors = new Request("", {"mode": "no-cors"}); |
| requestNoCors.headers.set(header[0], header[1]); |
| assert_equals(requestNoCors.headers.get(header[0]), null); |
| }, "Adding invalid no-cors request header \"" + header[0] + ": " + header[1] + "\""); |
| }); |
| |
| test(function() { |
| var headers = new Headers([["Cookie2", "potato"]]); |
| var request = new Request("", {"headers": headers}); |
| assert_equals(request.headers.get("Cookie2"), null); |
| }, "Check that request constructor is filtering headers provided as init parameter"); |
| |
| test(function() { |
| var headers = new Headers([["Content-Type", "potato"]]); |
| var request = new Request("", {"headers": headers, "mode": "no-cors"}); |
| assert_equals(request.headers.get("Content-Type"), null); |
| }, "Check that no-cors request constructor is filtering headers provided as init parameter"); |
| |
| test(function() { |
| var headers = new Headers([["Content-Type", "potato"]]); |
| var initialRequest = new Request("", {"headers": headers}); |
| var request = new Request(initialRequest, {"mode": "no-cors"}); |
| assert_equals(request.headers.get("Content-Type"), null); |
| }, "Check that no-cors request constructor is filtering headers provided as part of request parameter"); |
| |
| test(function() { |
| var initialHeaders = new Headers([["Content-Type", "potato"]]); |
| var initialRequest = new Request("", {"headers" : initialHeaders}); |
| var request = new Request(initialRequest); |
| assert_equals(request.headers.get("Content-Type"), "potato"); |
| }, "Request should get its content-type from the init request"); |
| |
| test(function() { |
| var initialHeaders = new Headers([["Content-Type", "potato"]]); |
| var initialRequest = new Request("", {"headers" : initialHeaders}); |
| var headers = new Headers([]); |
| var request = new Request(initialRequest, {"headers" : headers}); |
| assert_false(request.headers.has("Content-Type")); |
| }, "Request should not get its content-type from the init request if init headers are provided"); |
| |
| test(function() { |
| var initialHeaders = new Headers([["Content-Type-Extra", "potato"]]); |
| var initialRequest = new Request("", {"headers" : initialHeaders, "body" : "this is my plate", "method" : "POST"}); |
| var request = new Request(initialRequest); |
| assert_equals(request.headers.get("Content-Type"), "text/plain;charset=UTF-8"); |
| }, "Request should get its content-type from the body if none is provided"); |
| |
| test(function() { |
| var initialHeaders = new Headers([["Content-Type", "potato"]]); |
| var initialRequest = new Request("", {"headers" : initialHeaders, "body" : "this is my plate", "method" : "POST"}); |
| var request = new Request(initialRequest); |
| assert_equals(request.headers.get("Content-Type"), "potato"); |
| }, "Request should get its content-type from init headers if one is provided"); |
| |
| test(function() { |
| var array = [["hello", "worldAHH"]]; |
| var object = {"hello": 'worldOOH'}; |
| var headers = new Headers(array); |
| |
| assert_equals(headers.get("hello"), "worldAHH"); |
| |
| var request1 = new Request("", {"headers": headers}); |
| var request2 = new Request("", {"headers": array}); |
| var request3 = new Request("", {"headers": object}); |
| |
| assert_equals(request1.headers.get("hello"), "worldAHH"); |
| assert_equals(request2.headers.get("hello"), "worldAHH"); |
| assert_equals(request3.headers.get("hello"), "worldOOH"); |
| }, "Testing request header creations with various objects"); |
| |
| promise_test(function(test) { |
| var request = new Request("", {"headers" : [["Content-Type", ""]], "body" : "this is my plate", "method" : "POST"}); |
| return request.blob().then(function(blob) { |
| assert_equals(blob.type, "", "Blob type should be the empty string"); |
| }); |
| }, "Testing empty Request Content-Type header"); |
| |
| test(function() { |
| const request1 = new Request(""); |
| assert_equals(request1.headers, request1.headers); |
| |
| const request2 = new Request("", {"headers": {"X-Foo": "bar"}}); |
| assert_equals(request2.headers, request2.headers); |
| const headers = request2.headers; |
| request2.headers.set("X-Foo", "quux"); |
| assert_equals(headers, request2.headers); |
| headers.set("X-Other-Header", "baz"); |
| assert_equals(headers, request2.headers); |
| }, "Test that Request.headers has the [SameObject] extended attribute"); |
| |
| </script> |
| </body> |
| </html> |