Javascript $http get请求始终返回401 unauthorized-不发送身份验证标头
我在angularjs中使用以下控制器Javascript $http get请求始终返回401 unauthorized-不发送身份验证标头,javascript,angularjs,http,authentication,http-headers,Javascript,Angularjs,Http,Authentication,Http Headers,我在angularjs中使用以下控制器 app.controller('download-posts-controller',函数($scope,$http){ $http.get('http://localhost:8090/posts', { 标题:{ “授权”:持票人eyJhbGciOiJIUzUxMiJ9.EYJZDWIOIJYXNJYWYOIIXMJMILCJYB2XLIKOIYWRTAW4IFQ.4D9Tudqagiwaooyimn1LV8Y5WVCrif4Raegzfzelse9
app.controller('download-posts-controller',函数($scope,$http){
$http.get('http://localhost:8090/posts', {
标题:{
“授权”:持票人eyJhbGciOiJIUzUxMiJ9.EYJZDWIOIJYXNJYWYOIIXMJMILCJYB2XLIKOIYWRTAW4IFQ.4D9Tudqagiwaooyimn1LV8Y5WVCrif4Raegzfzelse9Diqhmik9WE9x4ESnnecxyAtjxazovpp-m72LpFADA”
}
}).成功(功能(响应){
窗口警报(响应)
});
});代码>确保设置凭据模式:
app.controller('download-posts-controller', function($scope, $http) {
$http.get('http://localhost:8090/posts', {
headers: {
//USE credentials mode
withCredentials: true,
'Authorization': 'Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJQYXNjYWwiLCJ1c2VySWQiOiIxMjMiLCJyb2xlIjoiYWRtaW4ifQ.4D9TUDQAgIWAooyiMN1lV8Y5wVCrIF4rAeGzFzelSE9diqHMik9WE9x4EsNnEcxQXYATjxAZovpp-m72LpFADA'
}
//SUCCESS is deprecated, removed from v1.6
//}).success(function(response){
}).then(function(response) {
window.alert(response)
});
});
有关详细信息,请参阅
这看起来很有希望,但它仍然返回401,根据我的浏览器,请求中不存在标题。它总是说请求方法也是可选的
来自浏览器的选项请求是
在中,将发送带有选项方法的飞行前请求,以便服务器可以响应是否可以发送请求。标头作为飞行前请求的一部分通知服务器,当发送实际请求时,将使用指定的请求方法发送该请求。标头通知服务器,当发送实际请求时,将使用指定的标头发送请求。然后,服务器有机会确定在这些情况下是否希望接受请求
服务器会做出响应,指定查询相关资源的可行方法
防止恶意网站使用用户的位置和凭据进行恶意操作。允许服务器允许浏览器在这些请求无害时放宽该策略。好的,我最终发现跨源(CORS)请求首先发送一个选项请求,以确保允许用户请求。
现在…我的api后端中有一些逻辑,可以过滤所有传入的HTTP并检查是否存在包含令牌的授权头(在所有情况下,uri包含“/auth/**”时除外)。当执行初始选项请求时,我提供的auth标头中的令牌不会被包括在内,因为浏览器首先会等待,直到选项返回表示我可以发出此请求……因此,服务器上会引发异常,因为选项请求未使用令牌验证
修复…我只是检查了“选项”HTTP方法,在本例中忽略了auth。简单。
谢谢大家帮助解决这个问题。最后,它只需要大量的调试
我希望这可能有助于指导其他至少一个遇到类似问题的人。您是否在API控制器的任何位置返回401
状态代码确保您的令牌有效,我确实在服务器上收到401,同样的令牌是绝对有效的,因为它是我用于开发的非过期令牌,我可以在postman中或从我的android应用程序(或apache wicket等效于我的网站,因为我刚刚迁移到angular)将其用于相同的请求它给了我预期的响应。我能让它发出实际get而不是不需要的选项请求的唯一方法是从请求中删除头组件。然后,我尝试了一个http拦截器来添加头,但也不起作用。这看起来很有希望,但它仍然返回401,根据我的浏览器,请求中不存在头。它总是说请求方法也是OPTIONS(即使我将url更改为stackoverflow.com——尽管我在这里得到301)。你知道为什么吗?我刚刚调试了服务器,以确认从angular page发送的请求中从未包含标头,但我通过任何其他方法发出相同的请求,并且包含标头