AngularJS $http对象未显示响应中的所有标头

37

我在使用AngularJS的$http服务调用API时,发现无法获取到所有的响应头信息。以下是我目前的代码:

$http({
    method: 'POST',
    withCredentials: true,
    url: 'http://api.mydomain.com/query',
    data: JSON.stringify(parameters)
})
.success(function(data, status, headers, config){
    ... // setting some scope parameters based on data
    console.log(headers());
})

我可以通过Chrome浏览器的网络选项卡来查看API返回的一系列响应头(我特别关注X-Pagination-Total-Items头信息)。

这是请求的网络选项卡的屏幕截图: Chrome's Network Panel

但上面的console.log语句(应该输出所有头文件)只返回两个: Console Log...missing headers!

有什么想法吗?我如何实际访问从AJAX调用返回的所有标头?

谢谢,

-Nate


你不能访问哪些标头?(此外,考虑在它们之前添加“X-”) - Benjamin Gruenbaum
Benjamin,我正在尝试获取X-Pagination-Total-Items。我想知道这是否是CORS问题,以及Access-Control-Expose-Headers是否无法使用通配符... - Nathan Rutman
1个回答

61

原来Access-Control-Expose-Headers不能接受通配符,我们需要明确指定客户端可以访问哪些标头,然后它就可以工作了。


7
我花了好几个小时来试图理解这件事。谢谢,谢谢,再次感谢你。 - Eli Gassert
2
天啊..我也忘了将这些头部添加到我的CORS过滤器中。难怪我可以在浏览器响应中看到它们,但在AngularJS的headers()调用输出中却看不到。 - Stephane
这是后端问题吗? - Tim Lieberman
3
是的,这是一个后端问题。您应该配置您的Web服务器以发送所需的标题字段。不支持通配符,因此这样做行不通; Access-Control-Expose-Headers:*相反,您应该提供精确的标题字段,例如: Access-Control-Expose-Headers:Etag - Sarpdoruk Tahmaz
如果您来自Google:在Apache2上,您需要启用“headers”模块。 - mit
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接