Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

// META: global=window,worker
let forbiddenMethods = [
"TRACE",
"TRACK",
"CONNECT",
"trace",
"track",
"connect",
"\rtrace",
"\ttrack",
"\nconnect",
"trace,",
"GET,track ",
" connect",
];
let overrideHeaders = [
"x-http-method-override",
"x-http-method",
"x-method-override",
"X-HTTP-METHOD-OVERRIDE",
"X-HTTP-METHOD",
"X-METHOD-OVERRIDE",
];
for (forbiddenMethod of forbiddenMethods) {
for (overrideHeader of overrideHeaders) {
test(() => {
let r = new Request("https://site.example/");
r.headers.append(overrideHeader, forbiddenMethod);
assert_false(r.headers.has(overrideHeader));
}, `header ${overrideHeader} is forbidden to use value ${forbiddenMethod}`);
}
}
let permittedValues = [
"GETTRACE",
"GET",
"\",TRACE\",",
];
for (permittedValue of permittedValues) {
for (overrideHeader of overrideHeaders) {
test(() => {
let r = new Request("https://site.example/");
r.headers.append(overrideHeader, permittedValue);
assert_equals(permittedValue, r.headers.get(overrideHeader));
}, `header ${overrideHeader} is allowed to use value ${permittedValue}`);
}
}