Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CORS和jQuery ajax调用_Jquery_Ajax_Cors - Fatal编程技术网

CORS和jQuery ajax调用

CORS和jQuery ajax调用,jquery,ajax,cors,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

我不确定这仅仅是因为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);
});
现在,当我运行这个程序时,我得到一个403禁止响应,这似乎是CORS飞行前检查

如果我打开GoogleAdvancedREST客户机,并使用授权头中的OAuth字符串创建相同的GET请求,那么该请求将起作用,我将返回我的数据

我一定是做错了什么,但不知道是什么?我是否遇到了一些我不知道的ajax限制,或者(很可能)设置不正确


我正在使用jQuery 1.10 fwiw。

我正在尝试了解如何使用CORS,因此这可能无法解决您的问题,但根据:

重要注意事项:当响应认证请求时,服务器必须指定域,并且不能使用通配符

所以你不能有:

Access-Control-Allow-Origin = *
Access-Control-Allow-Credentials = true
相反,必须明确指定允许的原点。例如:

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

暂时忽略Google客户端,您已经在一台服务器上设置了访问控制头,但您正在向另一台服务器发出请求?您希望发生什么?403禁止=服务器端问题。你把w,r,r归档了吗?(chmod 755)@MikeW我听到你在说什么了。我一直在想同样的事情,直到我让Google客户端工作,然后说“我知道CORS及其局限性吗?不是真的吗?那么让我们试试这个…”于是我花了3个小时挠头,也许这会让workSame
得到请求?如果您认为这是飞行前的请求,那么您需要尝试
OPTIONS
而不是
GET
。您的服务器是用什么代码编写的?我的猜测是,您的问题与这里发生的情况类似:例如,请求很好,但有其他东西阻止了它。如果这不起作用,请尝试将请求的请求/响应头与Google Advanced Rest客户端(什么是Google Advanced Rest客户端?)进行比较。