如何在Angular 8中获取http POST的响应标头

时间:2019-11-04 16:45:47

标签: angular

所以我有一个如下所示的帖子,我发送一个POST请求登录,响应为空 -符合预期,很好-但我需要访问“授权”标头。

我找不到任何访问方式。

  const data = {email: "email", password: "password"};

  this.http.post(`/login`, data).pipe(
    tap(resp => {
      console.log(resp); // it will be an empty string
      return resp;
    })).subscribe((resp: any) => {
    console.log(resp.headers.get('Authorization')); // error: Cannot read property 'headers' of null
  });

更新 受TheUnreal的答案启发,我添加了选项

this.http.post(`/login`, data, {observe: 'response'} )...

现在,我可以访问某些标头,例如“ Cache-Control”。

可能我需要从服务器端表达其余标头

Sam Walpole在评论部分中正确,此问题的大部分内容都在他提供的链接上得到了解答-签出。

2 个答案:

答案 0 :(得分:0)

您可以通过将以下选项传递给http方法来获取请求的标头和其他信息:

return this.http.post('YOUR URL', PAYLOAD, {
      observe: 'events'
    })

答案 1 :(得分:0)

按照TheUnreal的建议在帖子中添加选项,但对我来说需要“回复”

this.http.post(`/login`, data, {observe: 'response'} )

在服务器端,需要设置并公开标头 Access-Control-Allow-Headers Access-Control-Expose-Headers

话题不大,但是-可能对某人有帮助-这就是我们在Java Spring中的配置外观

configuration.setAllowedHeaders(Arrays.asList("Authorization", "Cache-Control", "Content-Type", "Access-Control-Allow-Headers", "Origin,Accept", "X-Requested-With", "Content-Type", "Access-Control-Request-Method", "Access-Control-Request-Headers"));
configuration.addExposedHeader("Authorization");

Sam Walpole在此问题的评论部分中是正确的,该问题的大部分内容都在他提供的链接上得到了解答-签出。