【问题标题】:jQuery & CORS always fail on an open remote serverjQuery & CORS 在打开的远程服务器上总是失败
【发布时间】:2015-11-27 00:57:25
【问题描述】:

我正在尝试使用 jQuery $.ajax() 方法在应该启用 CORS 的远程服务器上模拟 POST。

这个想法是提交一个带有用户名/密码的表单,并从成功的身份验证中获取服务器传递的 cookie。

这里是 jQuery:

$.ajax({
    type: 'POST',
    crossDomain: true,
    async: false,
    url: this.url,
    data: {
        username: this.username,
        password: this.password
    },
    xhrFields: {
        withCreditentials: true
    },
    success: function(responseData, textStatus, jqXHR) {
        console.info(jqXHR.getAllResponseHeaders());
    },
    error: function(responseData, textStatus, errorThrown) {
        console.warn(errorThrown);
    }
});

这是响应标头:

HTTP/1.1 200 OK
Connection: close
Content-Type: text/html
Pragma: no-cache
Cache-control: no-cache,max-age=0,must-revalidate
Content-Encoding: gzip
Vary: Accept-Encoding
Transfer-Encoding: chunked

以及请求头:

Accept: * / *
Accept-Encoding: gzip, deflate, sdch
Accept-Language: fr,en-US;q=0.8,en;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Host: my remote server (URL is hidden)

问题是我得到一个 console.warn 告诉我:

Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'URL'

我还尝试了一个模拟 POST 的 Chrome 扩展:我将相同的数据放入我的 jQuery 中,一切都成功了,从调用到提交表单后传递的 cookie。

我不明白我的 jQuery 是如何无法加载 URL 的,但还是给了我一个 200 OK !而且我不明白如何使它正确!

我哪里做错了?

【问题讨论】:

  • 那里没有启用 CORS。
  • @MinusFour 你怎么知道?我的系统管理员告诉我 CORS 已启用,并且 chrome 扩展成功
  • @PierreLeBot 会有一个Access-Control-Allow-Origin response 标题
  • data{ username: this.username, password: this.password} 中看不到this
  • @PHPglue 并不真正需要查看this 是什么,它只会增加问题的膨胀。这可能是我在下面提到的 CORS 问题。

标签: javascript jquery ajax cors


【解决方案1】:

看来您需要将 Access-Control-Allow-Origin: * 标头添加到 api 响应标头。您的 REST 客户端(Chrome 扩展程序)不像浏览器那样遵守 CORS 规则,这就是它起作用的原因。

【讨论】:

  • 好的,谢谢,但我想这是服务器端的,对吧?
  • 好的,让我和系统管理员一起看看,我会回复你(并验证你的答案)。这个修改应该够了吧?我的 jQuery 正确吗?
  • @PierreLeBot jQuery 看起来不错。
  • @PierreLeBot 您不太可能需要设置 crossDomain 属性
  • @PierreLeBot 详细说明 phil 所说的......如果您尝试“在同一域上强制执行跨域请求(例如 JSONP)”,则只需要设置 crossDomain 属性,因为默认情况下,如果您正在发出跨域请求,则该属性设置为 true。见api.jquery.com/jquery.ajax
猜你喜欢
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多