我想使用jQuery v1.8.3进行跨域GET ajax请求。
这是我的设置:
我在domain1.dev
上有一个服务器为每个请求发出这些CORS标头:
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: *
Access-Control-Allow-Headers: *
我在domain2.dev
上有一个网络应用程序,它从名为domain1.dev
的{{1}}加载了一个javascript。
在这个domain1.js
文件中,我发出了这个AJAX请求:
domain1.js
我从jQuery.ajax('http://domain1.dev/path', {
headers: {'Accept': 'application/json'},
xhrFields: {
withCredentials: true
},
statusCode: {
200: function(data, textStatus, jqXHR) {
// some logic
},
401: function(data, textStatus, jqXHR) {
// some other logic
}
}
})
加载页面。发出AJAX请求(没有预检)并且是成功的(状态代码200)但是firebug仍然以红色显示(chrome说“取消”)并且我不明白为什么。
有什么想法吗?
编辑:
domain2.dev
发送的响应标头:
domain1.dev
请求标题为:
Access-Control-Allow-Cred... true
Access-Control-Allow-Head... Accept, Accept-Encoding, Accept-Language, Connection, Cookie, Host, Origin, Referer, User-Agent
Access-Control-Allow-Meth... GET
Access-Control-Allow-Orig... *
Cache-Control private
Connection keep-alive
Content-Type application/json
Date Thu, 22 Nov 2012 22:24:44 GMT
Server nginx/1.2.3
Transfer-Encoding chunked
X-Powered-By PHP/5.4.6
x-debug-token 50aea62c91ee6
答案 0 :(得分:3)
在后端,您必须明确说明要允许的标头和方法。 Access-Control-Allow-Methods
和Access-Control-Allow-Headers
响应标头不支持通配符。
如果您想允许任何方法/标头,只需在(预检)请求中查找Access-Control-Request-Methods
和Access-Control-Request-Headers
标头,然后返回文字值。
而且,当Access-Control-Allow-Origin
为真时,您不能对withCredentials
使用通配符。使用与前面描述的相同的机制来模拟通配符,或者不使用withCredentials
。