2017-08-31 19 views
2

角度4では、HTTPリクエストを使用してカスタムヘッダーを送信できません。角4:httpリクエストでカスタムヘッダーを送信

私は、次のコードを使用してヘッダーを送信しようとしている:

let response = this.http.post(environment.serverUrl + url, data, this.getHeaders()) 
     .map((response: Response) => response.json()) 
     .catch(this.handleError); 

private getHeaders(): RequestOptions { 
    let reqOp = new RequestOptions(); 

    let headers = new Headers(); 
    headers.append('Accept', 'application/json'); 
    headers.append('Access-Control-Allow-Origin', '*'); 
    headers.append('Access-Control-Allow-Headers', '*'); 

    reqOp.headers = headers; 

    return reqOp; 
    } 

はまだヘッダは私のリクエストヘッダに追加されていません。 Chromeの「ネットワーク」で通話を確認すると、カスタムヘッダーが表示されません。

Accept:*/* 
Accept-Encoding:gzip, deflate 
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6 
Access-Control-Request-Headers:access-control-allow-headers,access-control-allow-origin,content-type 
Access-Control-Request-Method:POST 
Connection:keep-alive 
Host:10.xxx.xxx.xxx:3300 
Origin:http://localhost:4200 
Referer:http://localhost:4200/ 
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36 

これを解決するためのヘルプはありますか?私は '@ angular/common/http'のHttpClientを使用していません。

+0

可能重複[角度\ [4.3 \] HTTPClientのヘッダを送信しない](https://stackoverflow.com/questions/45286764/angular-4-3-httpclient-doesnt-send-header) –

+0

'headers.append( 'Access-Control-Allow-Origin'、 '*')を削除します。 フロントエンドリクエストからheaders.append( 'Access-Control-Allow-Headers'、 '*') 'これらは厳密にはリクエストに対する応答で返されるサーバの* response *ヘッダです。リクエストに追加する唯一の効果は、コードからPOSTリクエストを送信する前に、CORSプリフライトOPTIONSリクエストをブラウザに自動的にトリガすることです。詳細については、https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requestsを参照してください。 – sideshowbarker

+0

devtoolsのネットワークペインから得たヘッダーリストは、プリフライトOPTIONS要求のヘッダーです。プリフライトの目的は、リクエストを送信しようとしているサーバーに最初にアクセスして、そのサーバーにそれらのサーバーを含む発信元の要求を取得することを選択した場合は、そのサーバーに問い合わせることですヘッダー。サーバーがこれらのヘッダーを許可するように設定されている場合、ブラウザーにはOKであることを示す応答を送信し、その後にブラウザーはPOSTを送信します。しかし、サーバがそれがOKではないと言うなら、プリフライトは失敗し、ブラウザは決してPOSTを試みません。 – sideshowbarker

答えて

0

このようにします。より多くのヘッダーが必要な場合は、ヘッダーの配列に追加するだけです。

apiUrl = 'api/url' 
myFunction(data) { 
    let headers = new Headers({'Content-Type':'application/json'}); 
    let options = new RequestOptions({headers: headers}); 

    return this.http.post(this.apiUrl, JSON.stringify(data), options).map((response: Response) => { 
    return response.json() 
    }) 
} 
+1

まだ運がありません。 Chromeカスタムヘッダーの1つの見解は、「Access-Control-Request-Headers:access-control-allow-origin、content-type」の追加です。 – Suvonkar

関連する問題