无法在AngularJS中设置HTTP Basic Auth标头

Man*_*anu 5 javascript basic-authentication angularjs

我编写了以下控制器,用于使用Angular JS测试HTTP Basic Auth.

function TestCtrl($scope, $http, Base64){
    $http.defaults.headers.common.Authorization = 'Basic ' + Base64.encode('admin:secret');
    $http.jsonp( 'http://localhost:5000/test'+'/?callback=JSON_CALLBACK', {query:{isArray:true }}).
    then(function (response) {
         $scope.test = response.data;
     });
}
Run Code Online (Sandbox Code Playgroud)

我可以看到当我设置标题时console.log($http.defaults.headers).但是,当我在Firefox中使用Chrome开发者工具栏或Firebug检查请求标头时,我看不到授权标头.

接收请求的服务器未获得Authorization标头.

我在这里做错了什么?

JJ *_*wax 4

我相信答案是“是的,对于常规 AJAX 请求,您应该能够设置正确的身份验证标头”

但是,当您使用 JSONP(基于示例)时,您不会进行标准 XHR 调用,这会将答案更改为“否”

如果您无法使用 JSONP,我认为您无法发送任何身份验证标头。$http.get例如,JSONP 的工作方式与 Angular 的工作方式不同。

有关详细信息,请参阅http://schock.net/articles/2013/02/05/how-jsonp-really-works-examples/,但简短的版本是 JSONP 放置一个<script>获取一些数据的标签。返回的数据JSON_CALLBACK围绕服务器提供的数据调用您提供的函数(在您的示例中)。因此,您无法更改标头 - 该请求是 HTTP GET 请求,就像您将脚本标记的 URL 粘贴到浏览器的地址栏中一样。