今天我发现XMLHttpRequest的一种奇怪行为。当我调用GET服务时,发现如果我不设置Authorization头,那么来自firefox的请求是相同的。但是如果我添加"Authorization"头,则firefox首先发送一个带有"OPTIONS"的请求,然后再发送一个"GET"请求。
我知道动词"OPTIONS"必须在服务器端处理,但我只是想知道为什么XMLHttpRequest会表现出这样的行为。尽管它是跨域请求,但为什么浏览器要先发送"OPTIONS"请求?为什么添加"Authorization"头会改变行为。
以下是我的Javascript代码和Fidler检查报告。
var xmlhttp = new XMLHttpRequest();
var url = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
xmlhttp.open('GET',url,true);
xmlhttp.setRequestHeader("Authorization", "xxxxxxxxxxxxxxxxxxx");
xmlhttp.send(null);
xmlhttp.onreadystatechange = function() {
alert("OnReadystatechange + " + xmlhttp.readyState + " " + xmlhttp.status);
if (xmlhttp.readyState == 4) {
if ( xmlhttp.status == 200) {
}
else {
}
}
else
alert("Error ->" + xmlhttp.responseText);
}
并且小提琴手通过授权头做出响应
但是如果我不添加授权头,浏览器会直接发送GET请求而不是OPTIONS请求。
Access-Control-Max-Age
的值。 - levi