在本机浏览器提取中设置授权

时间:2016-01-07 18:14:53

标签: javascript browser fetch

我遇到一个问题,我似乎无法设置获取请求的标头,我想我错过了什么

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

我也尝试使用原生Headers(),零差异。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分:8)

我遇到了同样的问题,并在今晚进行了一些调查。问题是cross-origin resource sharing / CORS。使用Fetch,它是默认设置,它使事情变得更加复杂。

除非源和目标都相同,否则它是跨域请求,并且仅当请求到达支持CORS(跨源资源共享)的目标时才支持这些请求。如果没有,则不会通过。您通常会看到No 'Access-Control-Allow-Origin' header is present on the requested resource

之类的错误

这就是为什么你不能在非CORS网站上进行授权标头的原因;见#5和基本标题

FORBIDDEN HEADER NAMES:

不幸的是,在您尝试XMLHttpRequest路由之前,同样适用: 这与XMLHttpRequest相同:

最后,您的选择是:  1. JSONP  2.编写不在浏览器中的代理  3.将CORS放在目标服务器上

This article sums it up nicely