【发布时间】:2014-07-11 17:11:00
【问题描述】:
我不确定这是否只是我的 ajax 调用中设置不正确的情况,还是我误解了 CORS 的工作原理。
我在网络中的机器上运行了一个 Web 服务器 -- 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。
【问题讨论】:
-
暂时忽略 Google 客户端,您已经在一台服务器上设置了访问控制标头,但您正在向另一台服务器发出请求?你预计会发生什么?
-
403 禁止 = 服务器端问题。您是否制作了文件 w,r,r ? (chmod 755)
-
@MikeW 我听到你在说什么。在我让谷歌客户端工作之前,我一直在想同样的事情,然后说“我知道 CORS 及其局限性吗?不知道吗?那么让我们试试这个……”于是,我花了 3 个小时挠头,也许这会奏效
-
相同的
GET请求?如果您认为这是预检请求,那么您需要尝试OPTIONS而不是GET。 -
你的服务器是用什么代码写的?我的猜测是您的问题与这里发生的类似:stackoverflow.com/questions/21503822/… 例如请求很好,但其他东西阻止了它。如果这不起作用,请尝试将您的请求的请求/响应标头与 Google Advanced Rest Client(什么是 Google Advanced Rest Client?)进行比较。