CORS和jQuery ajax调用

时间:2014-02-01 01:13:37

标签: jquery ajax cors

我不确定这只是我的ajax调用中设置不正确的情况,还是我对CORS如何工作的误解。

我在网络框中运行了一个网络服务器 - larryq.mycompany.com。我可以完全访问该计算机,并在我的页面上设置了以下标题:

Access-Control-Allow-Origin = *
Access-Control-Allow-Headers = 'Authorization'
Access-Control-Allow-Credentials = true
Access-Control-Allow-Methods = "GET, POST, PUT, DELETE"

当我加载当前的测试页面时,我会在响应标题中看到这些值。

在这个页面上,我正在使用OAuth对网络上的另一台服务器进行ajax调用:

var OAuthAuthorizationString = 'OAuth realm="http://www.mycompany.com/", oauth_consumer_key="consumerkey"....oauth_nonce="1446691", oauth_version="1.0"'

$.ajax
({
    type: 'GET',
    url: 'https://secure.mycompany.com?val1=33&val2=45',
    data: [], 
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', 'OAuthAuthorizationString');
    }
})
.done(function (html) {
    $("#results").empty();
    $("#results").append(html);
})
.fail(function (jqXHR, textStatus) {
    $("#results").empty();
    $("#results").append(textStatus);
});

现在当我运行这个时,我在CORS预检检查期间得到了403 Forbidden响应。

如果我打开Goog​​le Advanced Rest Client并使用Authorization标头中的OAuth字符串制作相同的GET请求,请求就会生效,我会收回我的数据。

我必须做错事,但无法想出什么?我是否遇到了一些ajax限制,我不知道或(很可能)没有正确设置?

我正在使用jQuery 1.10 fwiw。

1 个答案:

答案 0 :(得分:0)

我试图了解如何自己使用CORS,所以这可能无法解决您的问题,但根据the documentation

  

重要说明:在响应凭证请求时,服务器必须指定域,并且不能使用通配符。

所以你不能拥有:

Access-Control-Allow-Origin = *
Access-Control-Allow-Credentials = true

相反,您必须明确指定允许的原点。例如:

Access-Control-Allow-Origin = larryq.mycompany.com
Access-Control-Allow-Credentials = true