Javascript/JQuery 在 OPTIONS Preflight API 中发送自定义标头



代码转储:

$.ajax({
   type: 'GET',
   dataType: 'json',
   url: api,
   xhrFields: {
     withCredentials: true
   },
   beforeSend: function (xhr) {
     xhr.setRequestHeader('Authorization', "Basic [my auth token]");
   },
   success: function(jd) {
      console.log(jd.stringify());
   }
});

问题是当我包含 beforeSend 时,Chrome 和 Firefox 会发送一个 OPTIONS 预检,但是 API 拒绝了该 OPTIONS 请求,因为它不知道如何处理 OPTIONS 请求并将其视为 GET,看不到授权标头并拒绝请求。

我能让它工作的唯一方法是强制浏览器不发送 OPTIONS 请求或包含我的标头。我无法修改我正在使用的 API。

如果有人能告诉我,我将不胜感激。

浏览器发送预检请求的原因是您使用的是自定义标头。请。了解如何避免印前检查请求(内容类型应为文本或 HTML,且无自定义标头)如果您无法在服务器端进行管理,则使其工作的最后机会是创建自定义代理(例如,您可以创建节点服务器,该节点应用程序将接受您的请求并将其转发到那些 Api,然后您将拥有自己的服务器,即使在某个域中,该代理服务器也会将 CORS 请求发送到另一个服务器域。

最新更新