使用Angularjs的$http时读取响应头

64

我正在使用$http发送API调用,它会发送一些自定义头信息,如X-Foo。然而我还无法找出如何读取它们。在$http({...}).success(function (data, status, headers, config) {...})函数中,headers是一个应该给我所有头部哈希的函数,但它只显示了content-type头部。是否有方法可以获取响应头部?


2
这些请求是发送到不同的域名还是同一个域名?我测试了将请求发送到同一个域名,并且我能够看到自定义头信息。 - Dhruv Chandna
2
你是对的,问题是由于不同的域引起的。在我让服务器发送Access-Control-Expose-Headers头之后,我终于能够显示自定义标头了。 - Joy Dutta
太好了!我很高兴它对你有用。 - Dhruv Chandna
18
@JoyDutta你应该创建一个答案,以便让这个问题不再列在“未回答”选项卡下面。 - Ye Liu
@JoyDutta,它仍在未回答的选项卡下,您应该创建一个答案并接受它。 - John Woodruff
显示剩余2条评论
2个回答

149

自定义头信息将在同一域名下可见。然而,在跨域情况下,服务器必须发送 Access-Control-Expose-Headers: X-Foo, ... 头信息才能使自定义头信息可见。


7
谢谢!你救了我的晚上。 - JRun
3
似乎您必须指定实际的标题名称,而不是通配符。Access-Control-Expose-Headers:* 不起作用,但 Access-Control-Expose-Headers: Etag 可以。 - Sam Barnum
7
对我来说,使用 Angular 的 $http 看起来并没有起作用。 - chovy
5
似乎即使使用标准头文件,CORS也需要进行这种解决方法。必须添加以下内容:Access-Control-Expose-Headers: Content-Disposition,才能使内容附带头文件在angularjs中可见。 - zszep
这是如何在 Rails 后端完成的:http://jaketrent.com/post/expose-http-headers-in-cors/ - Nuno Silva
你应该让 Angular 处理 cookies。为了允许其他域设置 cookies,你需要在 servlet 端处理:resp.setHeader("Access-Control-Allow-Credentials", "true"); - Sam Barnum

0

Spring 4.0+ 提供了 @CrossOrigin 注释,其具有以下参数:

  1. origins = 逗号分隔的来源列表。
  2. exposedHeaders = 逗号分隔的计数自定义参数列表。

示例

@CrossOrigin(origins = "*", exposedHeaders ="X-Total-Count")

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