代码转储:
$.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和火狐会发送OPTIONS预检,但是OPTIONS请求被应用程序接口拒绝,因为它不知道如何处理OPTIONS请求,并将其视为GET,看不到Authorization头并拒绝请求。
我能让它工作的唯一方法是强制浏览器不发送OPTIONS请求,或者在请求中包含我的头文件。我无法修改我正在使用的API。
如果有人能给我建议,我将不胜感激。
发布于 2017-01-11 07:06:58
浏览器发送印前检查请求的原因是您使用的是自定义headers。请。阅读如何避免印前检查请求(内容类型应该是文本或html,没有自定义标题)如果你不能改变服务器端,最后的机会让它工作是创建您的自定义代理(例如,您可以创建节点服务器和节点应用程序将接受您的请求,并将它们转发到这些Api,然后您将拥有自己的服务器,甚至在某些域中,此代理服务器将发送CORS请求到另一个服务器域。
https://stackoverflow.com/questions/41526654
复制相似问题