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

时间:2017-01-07 21:17:18

标签: javascript jquery ajax http-headers

代码转储:

$.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预检,但是OPTIONS请求被API拒绝,因为它不知道如何处理OPTIONS请求并将其视为GET,看不到授权标头并拒绝请求。

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

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

1 个答案:

答案 0 :(得分:0)

浏览器发送预检请求的原因是您使用的是自定义标头。请。阅读有关如何避免预检请求(内容类型应为text或html且无自定义标头) 如果您无法让服务器端工作,最后一次机会就是创建您的自定义代理(例如,您可以创建节点服务器,该节点应用程序将接收您的请求并将它们转发给那些Api然后您将拥有自己的服务器甚至在某个域中,此代理服务器将CORS请求发送到另一个服务器域。