jQuery CORS GET是成功的,但firebug仍以红色显示

时间:2012-11-22 21:54:25

标签: jquery ajax cors

我想使用jQuery v1.8.3进行跨域GET ajax请求。

这是我的设置:

  1. 我在domain1.dev上有一个服务器为每个请求发出这些CORS标头:

    • Access-Control-Allow-Origin: *
    • Access-Control-Allow-Credentials: true
    • Access-Control-Allow-Methods: *
    • Access-Control-Allow-Headers: *
  2. 我在domain2.dev上有一个网络应用程序,它从名为domain1.dev的{​​{1}}加载了一个javascript。

    在这个domain1.js文件中,我发出了这个AJAX请求:

    domain1.js
  3. 我从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说“取消”)并且我不明白为什么。

  4. 有什么想法吗?

    编辑:

    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
    

1 个答案:

答案 0 :(得分:3)

在后端,您必须明确说明要允许的标头和方法。 Access-Control-Allow-MethodsAccess-Control-Allow-Headers响应标头不支持通配符。

如果您想允许任何方法/标头,只需在(预检)请求中查找Access-Control-Request-MethodsAccess-Control-Request-Headers标头,然后返回文字值。

而且,当Access-Control-Allow-Origin为真时,您不能对withCredentials使用通配符。使用与前面描述的相同的机制来模拟通配符,或者不使用withCredentials