2016-11-09 5 views
3

RESTエンドポイントを呼び出しています。私はリソースを追加したい(下記)。 しかし、私のサービスがHttpのpostメソッドを呼び出すと、リクエストを呼び出しますが、レスポンスのヘッダは返されません。少なくとも、私はResponseインスタンスの空のヘッダーオブジェクトを経験します。 (??) 私は応答ヘッダーを期待します。特に、私はLocationヘッダーが "REST ADD RESOURCE"パターンの一部として期待しています。 Locationヘッダーには、新しく作成されたリソースのURLが含まれます。Angular2のHttp.postがPOSTメソッド呼び出しの応答でヘッダーを返さない

私はAPIを直接呼び出すと(正確にはAngular2経由ではありません)、正確な応答が得られますが、今回は(すべての)予想されるヘッダー(Location応答ヘッダーを含む)を取得します。

Uhh、Http.postに何か問題がありますか、何か間違っていますか?

:私のサービスは、この例ではObservable Responseを返します。これは、呼び出し側に返すための意図されたクラスタイプではありません。私は、ポストレスポンスで起こっていることを理解する便宜のためにそれを使用しています。実際には、Locationヘッダーに格納されているURLを渡すことが私の意図です。サーバがそう返されたヘッダがJSに使用することはできませんAllow-access-expose-headers: headernameを追加する必要がCORSリクエストで

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)); 
} 
+0

CORSリクエストの場合、サーバーは 'Allow-access-expose-headers'を追加する必要があります。そうしないと、返されたヘッダーはJSでは利用できません。レスポンスにヘッダーが含まれている場合は、ブラウザのdevtoolsをチェックインしましたか? –

+0

こんにちはガンター、私はコンソールにログオンしていましたが、ヘッダーは表示されませんでした。私はまた、手作業でリクエストを発し、私はPostmanでヘッダーを見ることができました。 (しかしAngular2のhttp.postではなく)。あなたが提案したCORSヘッダをチェックアウトするつもりです。ほとんどの場合、WSO2のAPIマネージャで調整する必要があります。 – user2120188

+0

コンソールへのロギングは、先に述べたように動作しないJSを最初に使用して読み込む必要があるため、役に立ちません。それが郵便配達所から働くのであれば、間違いなくCORSの問題です。 –

答えて

7

応答に実際にヘッダーが含まれている場合、ブラウザのdevtools(ネットワークタブのAFARK)で要求応答を調べることができますか?

+0

こんにちはガンター、私はCORSの設定がこの特定の残りのAPIのためのAPIゲートウェイ上にどのようになっているかチェックしました。まず、CORSがオンになっています。現在、一部のヘッダーはCORS要求に許可されるように構成されています。 (Locationヘッダーはサーバーレスポンスに属し、リクエストではないので、これは必要ではないと思います)。変更はありません.Btw、I have have * Allow-access -expose-headers *しかし* Access-Control-Allow-Headers *。これは問題ですか? – user2120188

+1

はい、それは問題です...「... expose-headers」は公開に関するものです;-)ブラウザでの応答を調査しましたか? devtools?あなたはそこに応答を見つけるだろうが、JSはそれを公開しません。 –

+0

http://stackoverflow.com/questions/40471271/cant-get-all-response-headers-from-angular-2-with-cors/40471695#40471695 –

関連する問題