Wro*_*ong 3 header httpclient angular
我知道对此有很多回答的问题,但没有一个对我有用。
我正在尝试进行以下调用:
this.http.options("http://...", {observe: 'response'}).subscribe((data: HttpResponse<any>) => console.log(data))
Run Code Online (Sandbox Code Playgroud)
但是,该输入的标题字段是空的!:
HttpResponse {headers: HttpHeaders, status: 200, statusText: "OK", url:
"http://...", ok: true, …}
body: ""
headers: HttpHeaders
lazyInit: ƒ ()
lazyUpdate: null
normalizedNames: Map(0)
size: (...)
__proto__: Map
[[Entries]]: Array(0)
length: 0
__proto__: Object
ok: true
status: 200
statusText: "OK"
type: 4
url: "http:/..."
__proto__: HttpResponseBase
Run Code Online (Sandbox Code Playgroud)
但是,如果我与 Postman 进行相同的调用,则会得到以下标题!
Allow ?PUT, HEAD, OPTIONS, GET
Content-Length ?0
Content-Type ?text/html; charset=utf-8
Date ?Fri, 28 Sep 2018 21:29:22 GMT
Server ?Google Frontend
X-Cloud-Trace-Context ?6627df99d34998ddeadcdcf7a2b132be;o=1
Run Code Online (Sandbox Code Playgroud)
我需要获得“允许”标题,但我似乎无法做到。
请帮助
我在你的问题中看到两个问题:
使用 Angular 的HttpClient,响应头是延迟加载的,这意味着您需要尝试get该值才能实际看到它存在。例如:
const allowValue = response.headers.get('allow');
Run Code Online (Sandbox Code Playgroud)
要允许您的客户端 JavaScript 访问此标头,您需要设置一个响应标头(当然是服务器端)。以下行显示了需要设置的标题和值:
Access-Control-Expose-Headers: allow
Run Code Online (Sandbox Code Playgroud)
您可以在 MDN 上阅读更多相关信息:Access-Control-Expose-Headers。