jQuery CORS将GET转换为OPTIONS调用

时间:2014-01-17 14:59:51

标签: jquery cors

这是我使用的示例代码

    $.ajax({
        type: "get",
        url: "http://myserver.com",
        beforeSend: function (xhr, data) {
            xhr.setRequestHeader("Authorization", "xxxx");
        }
});

当我在firebug中检查此调用时,我看到了OPTIONS,而且我也看不到请求标头中的授权代码。 CORS标头已添加到服务器端。

    response.addHeader("Access-Control-Allow-Headers", "origin, content-type, accept, x-requested-with");
    response.addHeader("Access-Control-Max-Age", "60"); 
    response.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
    response.addHeader("Access-Control-Allow-Origin", "*");     
    response.addHeader("Access-Control-Allow-Credentials", "true"); 

想法是使用纯jQuery,如果可以执行这样的查询。

1 个答案:

答案 0 :(得分:3)

由于您正在发送跨源ajax请求并使用此GET请求指定Authorization标头,因此正在进行预检(OPTIONS)。

另外(这不会导致问题)我建议删除contentType选项。这在GET请求的上下文中没有意义。 GET请求不应包含任何内容。所有数据都应包含在查询字符串中,或​​者可能包含在标题中。

授权标头不会随OPTIONS一起发送。您必须在服务器端确认它,然后浏览器将发送基础GET。在https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS了解有关CORS的更多信息。