我需要从Chrome扩展程序访问网络应用的API后端。来自网页本身的xhr请求始终是预检(OPTIONS)。但是,我无法获得启动预检请求的扩展,它会触发GET请求,服务器授权机制会先拒绝调用而不使用OPTIONS。
我读了stackoverflow上可用的内容,并试图添加一个随机的" x-weird-header"试图首先发送预检,但它没有工作。
另一件我无法理解的事情是,Chrome发送了一个" Origin"来自网页的来电的标题但来自我的扩展程序的请求缺少" Origin"头。
如何首先发送OPTIONS?为什么" Origin"我的请求中缺少?
谢谢!
$.ajax({
url : url, /* url is https and it is called from a non ssl but same domain origin*/
type : 'GET',
beforeSend : function( xhr ) {
xhr.setRequestHeader( "Accept", "application/json, text/plain, */*");
xhr.setRequestHeader( "Authorization", "BEARER " + auth_token );
xhr.setRequestHeader( "x-weird-header", "utf8" );
},
success : function (data) {
console.log(data);
},
error : function (data, errorThrown) {
console.log(data);
}
});

答案 0 :(得分:0)
我认为阅读Cross-Origin XMLHttpRequest可能会对此有所帮助。您的chrome扩展程序正在向远程服务器发出请求,因此您需要跨域权限。关于您的OPTIONS问题,请尝试使用此SO thread中提到的此选项:
Access-Control-Allow-Headers:Content-Type,Accept,X-Requested-With, 会话