将CORS调用设置为GET而不是OPTIONS

时间:2015-02-04 15:24:00

标签: javascript xmlhttprequest authorization cors

我正在创建一个CORS调用,如下所示:

createCORSRequest: function(method, url) {
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;

    if ("withCredentials" in xhr) {
        // Check if the XMLHttpRequest object has a "withCredentials" property.
        // "withCredentials" only exists on XMLHTTPRequest2 objects.
        console.log("Sending request with credneitials");
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined") {
        // Otherwise, check if XDomainRequest.
        // XDomainRequest only exists in IE, and is IE's way of making CORS requests.
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }

    xhr.setRequestHeader('Authorization', 'Bearer bf6dcfd4e975a007dc8184be6bcf580c'); //Authorization details needed

    return xhr;
}

问题是这总是作为OPTIONS调用发送,服务器根本不处理。如果我删除

xhr.setRequestHeader('Authorization', 'Bearer bf6dcfd4e975a007dc8184be6bcf580c');

然后它变成了GET请求,但是如果没有访问令牌,服务器将不会处理它。

有没有办法在GET请求中发送授权标头?

或者我是否必须修改服务器以处理OPTIONS请求?即预检等等。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

如果您设置了Authorization标头,那么您正在进行复杂的请求,并且您必须在浏览器发出GET请求之前处理OPTIONS预检。

您无法在不处理OPTIONS请求的情况下设置标头。