2016-12-16 71 views
0

我需要从Chrome扩展程序访问网络应用程序的API后端。源自网页本身的xhr请求总是预冲(OPTIONS)。但是,我无法获得扩展来激发预检请求,它会触发GET请求,并且服务器授权机制会首先拒绝没有OPTIONS的调用。Chrome扩展jquery Ajax预检选项

我读了什么在stackoverflow上可用,并试图添加一个随机的“x怪异头”试图发送预检,但它没有奏效。

我不明白的另一件事是,Chrome为网页上的呼叫发送了一个“Origin”标头,但是来自我的扩展程序的请求缺少“Origin”标头。

我该如何获得OPTIONS先发送?为什么我的要求中缺少“起源”?

谢谢!

\t $.ajax({ 
 
\t url : url, /* url is https and it is called from a non ssl but same domain origin*/ 
 
\t  type : 'GET', 
 
\t  beforeSend : function(xhr) { 
 
\t   xhr.setRequestHeader("Accept", "application/json, text/plain, */*"); 
 
\t   xhr.setRequestHeader("Authorization", "BEARER " + auth_token); 
 
\t   xhr.setRequestHeader("x-weird-header", "utf8"); 
 
\t  }, 
 
\t  success : function (data) { 
 
\t  console.log(data); 
 
\t  }, 
 
\t  error : function (data, errorThrown) { 
 
\t  console.log(data); 
 
\t  } 
 
\t });

回答

0

我觉得阅读Cross-Origin XMLHttpRequest可以帮助您与此有关。您的Chrome扩展程序向远程服务器发出请求,因此您需要跨源许可权。

访问控制允许报头:内容类型,接受,X-要求,随着, 会议

关于你的选择问题,因为在这个 SO thread提到的请尝试使用此选项