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 'Get' 服务响应?