Javascript 如何在angularjs中读取响应头?

Javascript 如何在angularjs中读取响应头?,javascript,angularjs,angular-http,Javascript,Angularjs,Angular Http,我的服务器返回此类标题:内容范围:0-10/0: 我试图用角度阅读此标题,但运气不佳: var promise = $http.get(url, { params: query }).then(function(response) { console.log(response.headers()); return response.data; }); 它只是印刷品 Object {content-type: "application/json; charset=utf-8"}

我的服务器返回此类标题:
内容范围:0-10/0

我试图用角度阅读此标题,但运气不佳:

var promise = $http.get(url, {
    params: query
}).then(function(response) {
  console.log(response.headers());
  return response.data;
});
它只是印刷品

Object {content-type: "application/json; charset=utf-8"}

您知道如何访问内容范围标题吗?

在成功和错误回调中使用
标题
变量

如果您在同一个域上,您应该能够检索回响应头。如果跨域,则需要在服务器上添加标头

Access-Control-Expose-Headers: content-type, cache, ...

根据穆罕默德的回答更新

$http.get('/someUrl').
  success(function(data, status, headers, config) {
    // this callback will be called asynchronously
    // when the response is available
    console.log(headers()['Content-Range']);
  })
  .error(function(data, status, headers, config) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });

为什么不试试这个呢:

var promise = $http.get(url, {
    params: query
}).then(function(response) {
  console.log('Content-Range: ' + response.headers('Content-Range'));
  return response.data;
});

特别是如果您想返回
承诺
,使其成为承诺链的一部分。

除了Eugene Retunsky的回答之外,还引用了有关回复的文档:

响应对象具有以下属性:

  • 数据
    {string | Object}
    –使用转换函数转换的响应体

  • 状态
    {number}
    –响应的HTTP状态代码

  • 标题
    {function([headerName])}
    –标题获取函数

  • config
    {Object}
    –用于生成请求的配置对象

  • 状态文本
    {string}
    –响应的HTTP状态文本

请注意,(v1.6)的参数回调顺序与上述不同:

使用
(value(Object | Array)、responseHeaders(Function)、status(number)、statusText(string))
参数调用成功回调,其中值是填充的资源实例或集合对象。使用
(httpResponse)
参数调用错误回调


COR情况下的响应标头保持隐藏。 您需要添加响应头,以指示Angular向javascript公开头

// From server response headers :
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, 
Content-Type, Accept, Authorization, X-Custom-header");
header("Access-Control-Expose-Headers: X-Custom-header");
header("X-Custom-header: $some data");

var data = res.headers.get('X-Custom-header');

来源:

根据MDN,默认情况下不公开自定义头。服务器管理员需要使用“Access Control expose Header”来公开它们,其方式与处理“Access Control allow origin”的方式相同

请参阅此MDN链接以获得确认 [

将给你所有的标题(德乌拉和海关)。为我工作


注意。我只在同一个域上进行了测试。我们可能需要在服务器上为跨域添加
访问控制公开头
头。

这仍然没有给我响应头,只有请求头。我已经启用了跨域。问题中的屏幕截图显示内容范围头是在chrome inspector的响应中。因此服务器不是问题所在。是的,CORS默认返回某些标头。您需要告诉它哪些其他标头可以通过api安全公开。成功调用似乎已被弃用,不应使用。检查文档:这不再有效!请参阅:给出(+1)因为
response
有一个
headers()
方法,该方法采用
name
参数。但这是我的问题;我无法通过
response.headers('Authorization')
检索
Authorization
头[或任何其他]授权,即使我可以看到
response.config.headers['Authorization']
一目了然!!!这个函数到底是干什么用的???是跨域请求吗?您可能不应该使用‌​像这样的单个请求中的授权。使用拦截器进行授权stuff@EugeneRetunsky:我有跨域请求。我可以看到响应中的授权标头,但现在可以获取它。无论如何,我可以这样做,因为API正在返回令牌以成功进行身份验证。
authorization
是常见的请求标头。我有一个ver将其视为响应标题。您确定它确实在您的响应中吗?
response.config.headers
可能指的是请求,而不是响应。
// From server response headers :
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, 
Content-Type, Accept, Authorization, X-Custom-header");
header("Access-Control-Expose-Headers: X-Custom-header");
header("X-Custom-header: $some data");

var data = res.headers.get('X-Custom-header');
response.headers();