【问题标题】:Adding HTTP header in AngularJS not working在AngularJS中添加HTTP标头不起作用
【发布时间】:2017-05-31 11:14:52
【问题描述】:

我是 AngularJS 的新手,我试图将 http 标头添加到所有请求中,但它不起作用。我实际上是尝试通过 Angular 中的.config 添加这些

我的代码是:

 angular.module('sc.app',[])
    .provider('TokenHandler',['$q',function ($q) {
        return {
            $get: function () {
                return {
                    request: function (config) {
                        var defer = $q.defer();
                        console.log('jwt');
                        config.defaults.headers.common['Authorization'] = 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==';
                        config.defaults.headers.common['Accept'] = 'application/json;odata=verbose';

                        return defer.resolve(config);
                    },
                    requestError: function (err) {
                        var defer = $q.defer();
                        return defer.reject(err);
                    },
                    response: function (success) {                            
                   var defer = $q.defer();
                    console.log(success)
                    return defer.resolve(success);
                },
                responseError: function (err) {
                    var defer = $q.defer();
                    return defer.reject(err);
                }
            };
        }
    }
}])

.config(['$httpProvider','TokenHandler',function ($httpProvider,TokenHandler) {
    $httpProvider.interceptors.push('TokenHandler');
}])

.service('TokenService',['$http','$localStorage',function ($scope,$localStorage) {
    $scope.getToken=function () {
        return $localStorage.gaid;
    }

    $scope.setToken=function (token) {
        $localStorage.gaid=token;
    }
}]);

我搜索了很多,但我无法解决其中的问题。即使我也尝试添加 config.headers 选项但也无法正常工作。

我的请求头是

GET /api/datatable.json?_=1484584475255 HTTP/1.1
Host: scrm.app
Connection: keep-alive
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.95 Safari/537.36
Referer: http://scrm.app/
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8,ta;q=0.6
Cookie: _ga=GA1.2.550730185.1483706923; 
XSRF-TOKEN=eyJpdiI6Ik9RaDBLeWluTVBIS0ZnOWkyaWxDUXc9PSIsInZhbHVlIjoiWlMzZUxONGthTmRKbkxxQjkxMGZWTE40d1lFYnAxRkRCM254b21abUpiOVFkd3VqbXowTjhlenFYa0xSazV1WmJuK2wweUFNZjVvM05NTXU3NjAwVmc9PSIsIm1hYyI6Ijg1Yzk0OWM3MTFkNTdlYTA1NjgzYjYyMmY3NmE1MWI0OTA4Mjc1MjM1ZTdkYTUxOWUxZmZhYjFlNzRmNzc2MDkifQ%3D%3D; laravel_session=eyJpdiI6InZqb01UbDRNVFgrTG1FVitvZW1WQXc9PSIsInZhbHVlIjoic3NKUXo5ZGd5ODBpZXhNRXBsa1pmbVhFSmhUVDA3RkZyQ3FcL1VlOVRZUWt4UlVxZVlidlU4VUV5VjBCZFwvUldCbzZVNU83R25zMXpRZ25DTENTZGpsUT09IiwibWFjIjoiZjNjNWM2OWU2ZDM3NDVlNDRkYTRhMjk4MmM4NWJmNjI0ODQyMmQwMjkzZTBkZWQ3N2ZjZTg4YzdjYTljZWNjNCJ9

我的响应头

 HTTP/1.0 404 Not Found
Host: scrm.app
Connection: close
X-Powered-By: PHP/5.6.27
Cache-Control: no-cache, private
Date: Mon, 16 Jan 2017 16:49:42 GMT
Content-type: text/html; charset=UTF-8

【问题讨论】:

  • 我认为这行有问题['$http','$localStorage',function ($scope,$localStorage) {=> $scope实际上是$http
  • 不工作@AlonEitan
  • 服务器是否允许授权头(Access-Control-Allow-Headers: Accept, Authorization)?
  • @AlonEitan 不工作
  • 是的,它允许但不工作我用请求标头更新了答案

标签: javascript angularjs http angular-http-interceptors


【解决方案1】:

通过配置添加标题时,您只需要 config.headers 例如-

config.headers['Authorization'] = 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==';
config.headers['Accept'] = 'application/json;odata=verbose';

仅当通过 $http 服务添加时,您才需要其余部分,例如-

 $http.defaults.headers.common.Authorization = 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==';

编辑:尝试将以下内容添加到 .service 块的另一种方法 -

.service('TokenService',['$http','$localStorage',function ($scope,$localStorage) {  
     var service = this;

    service.request = function(config) {
        config.headers['Authorization'] = 'Basic d2VudHdvcnRobWFuOkNoYW5nZV9tZQ==';
        config.headers['Accept'] = 'application/json;odata=verbose';

        return config;
    };
......

【讨论】:

  • 我在答案中添加了另一种方法,希望能奏效。为了澄清,是否要求工作正常,只是没有添加标题?
猜你喜欢
  • 2018-07-08
  • 2015-06-01
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 2012-07-18
  • 2016-02-11
相关资源
最近更新 更多