【问题标题】:jQuery CORS with credentials only works in Chrome带有凭据的 jQuery CORS 仅适用于 Chrome
【发布时间】:2012-09-03 10:17:45
【问题描述】:

我的 ajax CORS 请求遇到问题。 我让它在任何其他浏览器中工作,但 Firefox 不发送授权标头。

这是相应的代码

$.ajax(
{
  type: "GET",
  url: 'http://www.urlhere.com/file.php',
  crossDomain: true,
  xhrFields: { withCredentials: true },
  headers: { 'Authorization': 'Basic .....' },
  error: function(data,error,errormsg) {
    $('#serverTestLog').html('<h3><span style="color: red">' 
      + error + '</h3></span><p>'+errormsg+'</p>');
    },
    success: function(data) {
      $('#serverTestLog').html('<h3><span style="color: green">success</h3>');
    }
  });

问题似乎在于 Chrome 是唯一一个实际发送 Authorization 标头和请求的浏览器。如果我用 Firefox 尝试它,它会询问我用户名和密码,然后开始一个正确设置标头的新请求,但我想在没有用户交互的情况下执行此操作。

我也试过替换替换

headers: { 'Authorization': 'Basic .....' },

usename: 'username',
password: 'password',        

但 Chrome 仍然是唯一在其请求中发送 Authorization 标头的浏览器。这次 Firefox 以

结束请求

NetworkError: 401 Authorization Required”,无需询问用户名和密码。

有人知道我该如何解决这个问题吗?

【问题讨论】:

    标签: jquery ajax credentials cors request-headers


    【解决方案1】:

    因为您正在发送请求withCredentials,所以在实际请求之前会发出预检请求。预检OPTIONS 请求不包括用户凭据per the CORS spec

    OPTIONS 请求很可能以 401 响应,并且 Firefox 正确报告了它。

    ChromeWebKit 存在未解决的错误,即使 OPTIONS 请求因 401 而失败,预检后的后续请求仍会发送。

    【讨论】:

    • 我有类似的问题,我的应用程序是使用 Angular 7 构建的。我正在对 BPMS 服务器进行 ajax 调用,该服务器在 IE 中运行良好,但在 Chrome 中出现 CORS 错误。但是,当我将 ajax url 复制到 Chrome 浏览器时,我拥有所有数据。有人可以帮忙吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 2021-12-30
    • 1970-01-01
    相关资源
    最近更新 更多