2017-01-12 6 views
1

私はAngular 2.2.3を使用しており、rxjsで観測可能なものでHTTP要求を行っています。ヘッダーはChromeコンソールに表示されますが、応答のヘッダーオブジェクトのヘッダーのリストは空です。私が間違っているのか、私がすべきことをしています何か角2 http応答ヘッダーを返さない観測可能な要求

ログイン機能

login(body: Object): Observable<Response> { 
    return this.http.post(this.url, body); 
} 

ログイン機能のコールのサブスクリプションで観察

this.authService.login(values).subscribe(res => { 
    console.log(res.headers.get("Authorization")) 
    console.log(res) 
}, 
err => { 
    console.log(err); 
}); 

にあります:ここで コードです違うの?

クロームネットワークコンソールレスポンスヘッダ

This is the response in the Chrome console where 'Authorization definitely exists'

CONSOLE.LOG null値はres.headers.get("Authorization") あなたが見ることができるように、ヘッダのリストが空である

結果。 Chrome console

ありがとうございました!

+0

この:-)を読みながら、私は多くのことを学びました。データがサーバーから取得しているjsonレスポンスにない場合は、そこにはありません。 –

+0

@ JoshuaOhanaしかし、私が言及したように、ヘッダーはChromeネットワークコンソールに表示されるので、ヘッダーは確かに応答の一部です。私もPostmanを使用しています。私はAPIから受信したヘッダを受け取って解析できます。私のモカテストと同じこと。 – madube94

+0

オハイオ州私の悪い申し訳ありません、何らかの理由で私の脳は、イメージがそれを欠いていたと思ったの上に空白。よくわからない幸運 –

答えて

3

私は私の問題の解決策を見つけました。 Angularは背後でXMLHttpRequestを使用しています。そのため、クライアントに「プログラムで」(Angularの機能を使用して)表示できるヘッダは、ヘッダAccess-Control-Expose-Headersのリストになければなりません。このリストは、クライアントに要求を送り返すときにバックエンドで作成する必要があります。ここで私はAuthorizationヘッダーを有効にするためにExpressJSでやったことです:フロントエンドで

app.use((req, res, next) => { 
    // List of headers that are to be exposed to the XHR front-end object 
    res.header('Access-Control-Expose-Headers', 'Authorization'); 
    next(); 
}); 

私の最初のコードは同じとどまったとAuthorizationヘッダのconsole.logは現在表示されます。

Documentation explaining why we need this header

この全体のドキュメントは非常に興味深いです、私はAPIの中でかなり良いと思いましたが、これは角とは何の関係もありません

+2

同じ問題が発生しました。そのドキュメントには、 'Access-Control-Expose-Headersヘッダーを使うと、ブラウザがアクセスできるヘッダをホワイトリストに登録することができます。 Chromeネットワークコンソールでこれらの応答ヘッダーを取得できるのはなぜですか?'XMLHttpRequest'も使用しているのですか? – niaomingjian

関連する問題