| <!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"}); | |
| if ('blob' in request) { | |
| return request.blob().then(function(blob) { | |
| assert_equals(blob.type, "", "Blob type should be the empty string"); | |
| }); | |
| } | |
| }, "Testing empty Request Content-Type header"); | |
| </script> | |
| </body> | |
| </html> |