关于在ionic里面发送get请求时无法设置headers
发布于 2年前 作者 erguotou520 5391 次浏览 来自 问答

如题,我要做一个Oauth,第一步发送POST请求获取到了access_token,第二步准备用access_token来GET获取API,我试图用各种方法设置$httpheaders部分,比如下面这样

$http({method: 'get', url: $rootScope.site + '/ghost/api/v0.1/settings', headers: {Authorization: 'Bearer ' + $rootScope.user.token.access_token}})

但是最后请求的头信息里面都是这样的

OPTIONS /ghost/api/v0.1/settings HTTP/1.1
Host: 192.168.137.1:2368
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Access-Control-Request-Method: GET
Origin: http://evil.com/
User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 7_0 like Mac OS X; en-us) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://localhost:8100/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4

但是之前POST获取access_token的时候是正确的,我感觉我设置的头信息都变到Access-Control-Request-Headers这个里面了,这样我的请求里面就没有认证信息,所以请求结果401. 我应该怎样做?纠结了好久。。

4 回复

我是直接这样设置全局的头信息的,你试试行不行? $http.defaults.headers.common.AccessToken = user.authorizationToken;

不行,这种方法也试过 后台接收到的是这样的 后台请求 前台错误是这样的,应该是这个OPTIONS请求导致的,OPTIONS请求里面没有Authorization,所以后台返回了401 前台错误 我是用的chrome打开的,但是已经用那个插件允许跨域了

这个可能还是因为浏览器中模拟的原因,在真机上没有这个问题

真机上用的是file:\\协议,不存在跨域的问题吧,如果要解决跨域问题,有两种方法,一种就是jsonp,比较通用,一种就是在服务器段设置 Access-Control-Allow-xxxxx之类的,不过应该只支持较新的浏览器,记不清了

回到顶部