在Angular 6中无法通过HTTP客户端访问响应标头

时间:2018-09-12 11:59:53

标签: angular angular6

我正在尝试访问HTTP响应中的一些自定义标头,并在请求中设置了我的http客户端选项以观察响应,例如:

  public createShift = () => {
    return this.http.post('http://localhost:8080/services/shift-events', {
      shiftEventType: 'START_SHIFT'
    }, { observe: 'response'});
  }

调用此方法时,在查看浏览器的网络活动时,我会在http响应中看到我感兴趣的标头(“ Location”),但我无法在代码中访问它:

this.shiftEventsService.createShift().subscribe((response: HttpResponse<any>) => {
  console.log(response.headers.get('Location'));  //undefined
  const keys = response.headers.keys();
  keys.map(key =>
    console.log(`${key}: ${response.headers.get(key)}`) //no headers get logged out
  );
});

“网络”标签中的标题如下:

enter image description here

我什至尝试注销返回的任何标头,但都找不到(例如,Access-Control-xxxx的标头)。

调用createShift时注销订阅中响应的值,我看到:

enter image description here

因此返回了零标头。

我觉得这里缺少明显的东西,但是当检查angular docs和其他指南时,我看不到它是什么。

有人可以在这里帮忙吗? 谢谢

更新:

如果我在邮递员中也尝试相同的请求,我会看到标头:

enter image description here

因此,与我所知的服务器配置不正确无关。

已解决

最终导致这样的事实,即所发出的请求实际上触发了CORS预检请求,并且服务器实现需要在响应中添加Access-Control-Expose-Headers: Location头。

我现在可以使用我发布的代码访问标头

0 个答案:

没有答案