Angular HttpClient-从响应获取标头

时间:2018-09-28 21:56:27

标签: angular header httpclient

我知道对此有很多回答的问题,但是没有一个对我有用。

我正在尝试拨打以下电话:

this.http.options("http://...", {observe: 'response'}).subscribe((data: HttpResponse<any>) => console.log(data))

但是该输入的标头字段为空! :

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

但是,如果我与邮递员进行相同的通话,则会得到以下标题!

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

我需要获取“允许”标头,但我似乎无法做到这一点。

帮助请

1 个答案:

答案 0 :(得分:2)

我在您的问题中看到两个问题:

  1. 使用Angular的const styles = () => ({ root: { top:65 }, }); const Picker = ({ classes, identifier, topLabel, onSelection, options, selectedValue, }) => ( <form autoComplete="off"> <TextField name={identifier} select label={topLabel} value={selectedValue} onChange={onSelection} > <div className={classes.root}> {options.map(({ label, value }) => ( <MenuItem key={value} value={value}>{label}</MenuItem> ))} </div> </TextField> </form> ); ,响应头是延迟加载的,这意味着您需要尝试HttpClient才能真正看到它的存在。例如:

    get
  2. 为了允许您的客户端JavaScript访问此标头,您需要设置一个响应标头(当然是服务器端)。下面的行显示了标题和需要设置的值:

    const allowValue = response.headers.get('allow');
    

    您可以在MDN上详细了解此内容:Access-Control-Expose-Headers