2016-01-07 82 views
6

我对面的一个问题,我似乎在哪里可以不设置标题来对为获取请求,我想我想的东西获取授权

var init = { 
     method: 'GET', 
     headers: { 
      'Accept': 'application/json', 
      'Content-Type': 'application/json', 
      'Authorization': 'Bearer myKey' 
     } 
    }; 
return fetch(url, init).then(function(response){... 

当请求被检查在网络选项卡中,我没有看到头都将置,而是看

Access-Control-Request-Headers:accept, authorization, content-type 

的时候我希望看到

Authorization: Bearer myKey 
Content-Type: application/json 
Accept: application/json 

我也尝试使用本地头()与零差异。

我在这里错过了什么吗?

+0

我认为“头”属性必须是一个头的实例,而不是只是一个普通的对象。 – Pointy

+0

https://developer.mozilla.org/en-US/docs/Web/API/Headers#Examples – xkcd149

回答

7

我有同样的问题,今天晚上进行了一些调查。问题是cross-origin resource sharing/CORS。使用Fetch它是默认的,它使事情变得相当复杂。

除非两个起点和终点是一样的它是一个跨域请求,如果该请求是支持CORS(跨来源资源共享)的目的地,这些只支持。如果没有,那么它将不会通过。您通常会看到如下错误:No 'Access-Control-Allow-Origin' header is present on the requested resource

这就是为什么您无法在非CORS站点上执行授权标题;见#5,基本报头

FORBIDDEN头名:

不幸的是,你尝试了XMLHttpRequest路线之前,同样适用: 这是使用XMLHttpRequest相同:

最后,你的选择,向前移动的是: 1. JSONP 2.编写一个不在浏览器中的代理在目标服务器上个3.将CORS

This article sums it up nicely