代码转储:
$.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。
如果有人能告诉我,我将不胜感激。
答案 0 :(得分:0)
浏览器发送预检请求的原因是您使用的是自定义标头。请。阅读有关如何避免预检请求(内容类型应为text或html且无自定义标头) 如果您无法让服务器端工作,最后一次机会就是创建您的自定义代理(例如,您可以创建节点服务器,该节点应用程序将接收您的请求并将它们转发给那些Api然后您将拥有自己的服务器甚至在某个域中,此代理服务器将CORS请求发送到另一个服务器域。