Angular2 的 Http.post 没有在 POST 方法调用的响应中返回 headers

Angular2 's Http.post is not returning headers in the response of a POST method invocation

我正在调用 REST 端点。我想添加一个资源(如下)。 但是,当我的服务调用 Http 的 post 方法时,它将调用请求但响应的 header(s) 未被 returned。至少,我遇到了 Response 实例的空 headers object。 (??) 我确实期待回应 header。特别是我希望 Location header 作为 "REST ADD RESOURCE" 模式的一部分。 Location headers 包含新创建资源的 URL。

奇怪的是:当我直接调用我的 API 时(因此不是通过 Angular2),我得到了准确的响应,但这次有(所有)预期的 header,包括位置响应 header.

呃,Http.post有问题还是我做错了什么?

提醒您:我的服务return在这个例子中是一个可观察的响应。这不是 class 类型 return 给调用者的预期类型。我使用它是为了方便理解 post 响应发生了什么。实际上,我打算传递存储在位置 header 中的 url。

addModel(model: any): Observable<Response> {
let token = this.loginService.auth.accessToken;
let headers = new Headers({
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': `Bearer ${token}`
});
let options = new RequestOptions({headers: headers});
let data: string = JSON.stringify(model);
return this.http.post(this.url, data, options)

  // .map(r => {
  //   console.log("Response ", r);
  //   return r.headers.get("Location"); // THERE IS NOTHING IN headers (?). Don't understand.
  // })
  .catch(err => Observable.throw(err));
 }

对于 CORS 请求,服务器需要添加 Allow-access-expose-headers: headername 否则返回的 headers 将无法用于 JS。

如果响应实际上包含 headers?

,您可以在浏览器开发工具(网络选项卡 AFARK)中调查请求响应