Angular 2:无法访问http请求中的响应标头

时间:2015-11-12 10:04:33

标签: angular

我正在使用angular2-http(alpha.44)模块从REST Api检索数据。我无法弄清楚如何访问响应的标题映射中的信息,我需要一个特定的字段。例如:

var req = new Request({
  url: `localhost/api/products`,
  method: RequestMethods.Get
});

this.http.request(req).subscribe(
  res => {
    // Can't access the headers of the response here.... res.headers is empty
    },
  error => { ... },
  _ => {}
);

奇怪的是,如果我在浏览器的开发工具中检查网络流量,则会出现响应头...

3 个答案:

答案 0 :(得分:6)

解决方案已在已经链接的问题中,但在稍后的评论中:https://github.com/angular/angular/issues/5237#issuecomment-239174349

除了一些通用标头之外,只有列为Access-Control-Expose-Headers标头值的标头才会在Angular2中映射(也可能与其他标头一起映射)。这必须在后端添加。

对我而言,Authorization标题需要一个多小时的时间才能找到它。我认为这不是自定义标题,但它是。

在PHP中调用类似这样的东西: header("Access-Control-Expose-Headers: Authorization, X-Custom-header");

如果您使用Laravel作为barryvdh/laravel-cors后端,请在config/cors.php文件中执行此设置。

答案 1 :(得分:4)

There is already an issue about that problem opened on github:-

https://github.com/angular/angular/issues/5237#issuecomment-156059284

Please check it, as someone posted a workaround.

UPDATE

The angular team has already solved this problem.

答案 2 :(得分:1)

我发现此链接有用: https://developer.mozilla.org/es/docs/Web/HTTP/Headers/Access-Control-Expose-Headers

我必须通过添加标题的内容来指定我必须从我的服务器本身向最终用户公开所需的标题!

// Request headers you wish to expose
res.setHeader('Access-Control-Expose-Headers', 'your_desired_header, content-type');

干杯!