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

Posted

技术标签:

【中文标题】AngularJS $http 对象未显示响应中的所有标头【英文标题】:AngularJS $http object not showing all headers from response 【发布时间】:2014-03-05 07:57:08 【问题描述】:

我遇到了 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 标头特别感兴趣)。

以下是请求中网络选项卡的屏幕截图:

但是上面的 console.log 语句(应该输出所有的标题)只返回两个:

知道发生了什么吗?我如何真正访问从 AJAX 调用返回的所有标头?

谢谢,

-内特

【问题讨论】:

您无法访问哪些标题? (另外,考虑在它们前面加上X- Benjamin,我正在尝试获取 X-Pagination-Total-Items。我想知道这是否是 CORS 问题以及 Access-Control-Expose-Headers 是否不能使用通配符... 【参考方案1】:

原来 Access-Control-Expose-Headers 不能接受通配符。我们需要准确地指定客户端应该可以访问哪些标头,然后它才起作用。

【讨论】:

我花了几个小时试图弄清楚这一点。谢谢,谢谢,一百万次谢谢 @EliGassert,很高兴它也对您有所帮助。 *** 的一大优点! :-) 天哪.. 我也忘记将这些标题添加到我的 CORS 过滤器中。难怪我可以在浏览器响应中看到它们,但在 AngularJS headers() 调用输出中看不到。 这是后端问题吗? 是的,这是一个后端问题。您应该配置您的 Web 服务器以发送回所需的标头字段。不支持通配符,所以这不起作用; Access-Control-Expose-Headers:* 相反,您应该提供确切的标题字段,即 Access-Control-Expose-Headers:Etag

以上是关于AngularJS $http 对象未显示响应中的所有标头的主要内容,如果未能解决你的问题,请参考以下文章

使用angularjs在html中的表格数据单元格上显示下拉列表

angularjs中的$http详解

在 AngularJS 中缓存 HTTP 'Get' 服务响应?

使用 angularjs $http 处理分块响应

从服务器端nodejs到angularjs的有限json响应

AngularJS 2/4 中 BehaviourSubject 中的 HTTP 响应缓存和下一步