向具有不同域和基本身份验证的服务器发出 ajax POST 请求是不可能的吗?

Posted

技术标签:

【中文标题】向具有不同域和基本身份验证的服务器发出 ajax POST 请求是不可能的吗?【英文标题】:is making an ajax POST request to a server with a different domain and basic auth impossible? 【发布时间】:2015-03-30 15:59:47 【问题描述】:

我正在尝试向具有不同域的服务器发出 POST 请求,这需要基本身份验证。

我已经尝试了 beforeSend 和 withCredentials 的所有组合,但基本的身份验证标头从未在 OPTIONS 预检请求中发送。

 $.ajax(
      url: anotherdomain,
      data: data,
      cache: false,
      contentType: false,
      processData: false,
      type: 'POST',
      dataType:'json',
      xhrFields: 
         withCredentials: true
      ,
      crossDomain: true,
      beforeSend: function(xhr) 
        xhr.setRequestHeader('Authorization', 'Basic *');
          xhr.withCredentials = true;        
      

我似乎可以让这个请求成功的唯一方法是将 dataType 设置为“jsonp”,或者将请求“type”设置为 GET。

解决此问题的唯一方法是从另一个域服务器中删除 OPTIONS 请求的基本身份验证要求吗?

谢谢。

【问题讨论】:

【参考方案1】:

您还必须在服务器上允许标头: 这是一个 php 示例(这对所有来源的请求都是开放的,我建议您将其仅限于生成 ajax 的站点):

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, PUT, POST, DELETE, OPTIONS');
header('Access-Control-Max-Age: 1000');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With');

【讨论】:

以上是关于向具有不同域和基本身份验证的服务器发出 ajax POST 请求是不可能的吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery/ajax 的基本身份验证

具有多个域和子域的 PHP 身份验证

使用 ajax 发出 http 请求以获得基本授权和 cors

为啥 Chrome 和 Firefox 使用基本身份验证的 CORS ajax 调用的行为不同?

向 Google 进行身份验证时,从 Spring OAuth2 授权服务器发出 JWT 令牌

如何向 sharepoint 2010 中托管的 wcf 服务发出经过身份验证的请求?