我不确定这只是我的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响应。
如果我打开Google Advanced Rest Client并使用Authorization标头中的OAuth字符串制作相同的GET请求,请求就会生效,我会收回我的数据。
我必须做错事,但无法想出什么?我是否遇到了一些ajax限制,我不知道或(很可能)没有正确设置?我正在使用jQuery 1.10 fwiw。
答案 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