我正在尝试访问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
);
});
“网络”标签中的标题如下:
我什至尝试注销返回的任何标头,但都找不到(例如,Access-Control-xxxx的标头)。
调用createShift时注销订阅中响应的值,我看到:
因此返回了零标头。
我觉得这里缺少明显的东西,但是当检查angular docs和其他指南时,我看不到它是什么。
有人可以在这里帮忙吗? 谢谢
更新:
如果我在邮递员中也尝试相同的请求,我会看到标头:
因此,与我所知的服务器配置不正确无关。
已解决
最终导致这样的事实,即所发出的请求实际上触发了CORS预检请求,并且服务器实现需要在响应中添加Access-Control-Expose-Headers: Location
头。
我现在可以使用我发布的代码访问标头