CORS和jQuery ajax调用
我不确定这仅仅是因为ajax调用中的设置不正确,还是因为我误解了CORS的工作原理 我有一个网络服务器运行在我的网络盒子上--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
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客户端?)进行比较。