3

我的 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 授权”,无需询问用户名和密码。

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

4

1 回答 1

0

因为您正在发送请求withCredentials,所以在实际请求之前发出了预检请求。根据CORS 规范,预检OPTIONS请求不包括用户凭据。

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

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

于 2013-04-01T19:57:48.990 回答