访问响应头字段

时间:2017-03-02 05:15:34

标签: angularjs http-headers

现在我有一个RESTful API,每当我的AngularJS服务访问我的端点时,它就会返回一个刷新的JWT授权令牌。我想让用户的浏览器通过localStorage创建的响应对象访问它来保存此令牌(作为会话的一部分和$httpProvider.intercepters)。我的问题是我不知道如何获得该响应对象。我知道我的浏览器会看到响应标题以及我放在那里的所有自定义值:

Response header fields

我尝试访问response.headersresponse.config.headers,但两人都没有包含我的值。显然浏览器会看到它,但我如何获得这些值呢?

2 个答案:

答案 0 :(得分:7)

来自AngularJS,$http documentation

您可以从成功和错误回调中访问标题,如:

1)如果您提出的请求如下:

// Simple GET request example:
$http({
  method: 'GET',
  url: '/someUrl',
  // This header will be sent as a part of the request
  headers: {
    'name-of-header': 'header-data'
  },
}).then(function successCallback(response) {
    // Access the headers like
    var headerData = response.headers('name-of-header');
  }, function errorCallback(response) {
    // Access the headers like
    var headerData = response.headers('name-of-header');
  });

2)使用拦截器:

// alternatively, register the interceptor via an anonymous factory
$httpProvider.interceptors.push(function($q) {
  return {
   'request': function(config) {
       config.headers = config.headers || {};
       // Send new header
       config.headers['my-header'] = 'my-header-data';

       // Don't forget to return the config
       return config;
    },

    'response': function(response) {
       // Get header from response
       var myHeaderData = response.headers('my-header');

       // Don't forget to return response object or a promise.'
       return response || $q.when(response);
    }
  };
});

注意:自定义标头将在同一个域中显示。但是,对于跨域请求,服务器必须发送带有标头名称的Access-Control-Expose-Headers: foo-bar-header, ...标头以作为值公开,这将使$http模块可以看到自定义标头。详细了解CORS。另请参阅Access-Control-Expose-Headerssecurity considerations

答案 1 :(得分:0)

这很简单..它可以通过使用以下方法实现。

function SuccessCB(response){
// securityID is response header param name.
var resheader = response.header['securityID'];
}