Angular 2 http Observable请求不返回响应头

时间:2017-01-12 15:18:38

标签: javascript http angular

我正在使用Angular 2.2.3并使用带有rxjs的observable进行http请求。标题显示在Chrome控制台中,但响应中标题对象上的标题列表为空。 这是代码:

登录功能

login(body: Object): Observable<Response> {
    return this.http.post(this.url, body);
}

通过订阅可观察的

来调用登录功能
this.authService.login(values).subscribe(res => {
    console.log(res.headers.get("Authorization"))
    console.log(res)
},
err => {
    console.log(err);
});

我做错了什么或我应该做些什么?

Chrome网络控制台响应标题

This is the response in the Chrome console where 'Authorization definitely exists'

Console.log结果

null值为res.headers.get("Authorization") 如您所见,标题列表为空。 Chrome console

非常感谢你的帮助!

1 个答案:

答案 0 :(得分:3)

我找到了解决问题的方法。事实证明,Angular在幕后使用XMLHttpRequest。因此,可以以编程方式向客户端显示的标题&#34; (使用Angular函数)必须位于标题Access-Control-Expose-Headers的列表中。当我们将请求发送回客户端时,必须在后端创建此列表。以下是我使用ExpressJS启用Authorization标头的方法:

app.use((req, res, next) => {
  // List of headers that are to be exposed to the XHR front-end object
  res.header('Access-Control-Expose-Headers', 'Authorization');
  next();
});

我在前端的初始代码保持不变,现在显示console.log标题的Authorization

Documentation explaining why we need this header

这整个文档非常有趣,我认为我在API方面相当不错,但在阅读本文时我学到了很多东西: - )