【问题标题】:CORS and jQuery ajax callCORS 和 jQuery ajax 调用
【发布时间】: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?)进行比较。

标签: jquery ajax cors


【解决方案1】:

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

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

所以你不能拥有:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-09-23
    • 2014-09-13
    • 1970-01-01
    • 2015-09-04
    • 2015-12-15
    • 2013-12-24
    • 2013-06-30
    • 2011-09-28
    相关资源
    最近更新 更多