blob: ae9a16859c51d3d4ddc31bb98dfd38cf99ceefef [file] [log] [blame]
<html>
<body>
<p>
This page tests redirection of HEAD requests with different codes (301, 302, 303, 307).
<br/>
As described in http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics (in particular sections 7.4.2, 7.4.3, 7.4.4 and 7.4.7 as of version 22 of the document), a redirected HEAD request is expected to remain a HEAD request.
<br/>
<br/>
This test loads a web page that does a XHR HEAD request to a first script.
This script does a redirection to a second script that sends a response containing the request method as a HTTP header.
</p>
<pre id="console"></pre>
<script type="text/javascript">
function log(message) {
document.getElementById("console").appendChild(document.createTextNode(message + "\n"));
}
if (window.testRunner) {
testRunner.dumpAsText();
testRunner.waitUntilDone();
}
var testIndex = 0;
var tests = [
{testName : "HEAD-301", method : "HEAD", code : 301, expectedMethod : "HEAD"},
{testName : "HEAD-302", method : "HEAD", code : 302, expectedMethod : "HEAD"},
{testName : "HEAD-303", method : "HEAD", code : 303, expectedMethod : "HEAD"},
{testName : "HEAD-307", method : "HEAD", code : 307, expectedMethod : "HEAD"},
];
function checkResult(xhr, hasError) {
var test = tests[testIndex];
if (xhr.status != 200 && xhr.status != 304)
hasError = true;
var msg = test.testName;
if (hasError) {
msg += " - error";
} else {
var requestMethod = xhr.getResponseHeader("REQMETHOD");
msg += " - expected " + test.expectedMethod + " and received " + requestMethod;
}
log(msg);
if (++testIndex < tests.length) {
testMethodSync();
} else if (window.testRunner) {
testRunner.notifyDone();
}
}
var urlTemplate = "/xmlhttprequest/resources/redirect_methods.php?url=/xmlhttprequest/resources/get_method.php&code=";
function testMethodSync() {
var test = tests[testIndex];
try {
xhr = new XMLHttpRequest;
xhr.open(test.method, urlTemplate + test.code, false);
xhr.send("");
checkResult(xhr, false);
} catch(e) {
checkResult(xhr, true);
}
}
testMethodSync();
</script>
</body>
</html>