我编写了以下 Controller ,用于使用 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;
});
}
我可以看到在 console.log($http.defaults.headers)
时设置的 header 。但是,当我在 Firefox 中使用 Chrome 开发人员工具栏或 Firebug 检查请求 header 时,我看不到授权 header 。
接收请求的服务器未获得授权 header 。
我做错了什么?
最佳答案
我相信答案是“是的,对于常规的 AJAX 请求,您应该能够设置正确的身份验证 header ”。
但是,当您使用 JSONP(基于示例)时,您并没有进行标准的 XHR 调用,这会将答案更改为“否”。
如果您无法使用 JSONP,我认为您无法发送任何身份验证 header 。 JSONP 的工作原理与 Angular 的 $http.get
不同。例如。
参见 http://schock.net/articles/2013/02/05/how-jsonp-really-works-examples/有关详细信息,但简短版本是 JSONP 放下一个 <script>
获取一些数据的标签。返回的数据围绕服务器提供的数据调用您提供的函数(在您的示例中为 JSON_CALLBACK
)。因此,您无法更改 header ——该请求是一个 HTTP GET 请求,就像您将脚本标记的 URL 粘贴到浏览器的地址栏中一样。
关于javascript - 无法在 AngularJS 中设置 HTTP Basic Auth header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16924360/