2017-01-24 8 views
2

に追加されますが、以下のようリクエストをGET:カスタムヘッダーが、私は私の角度のjsにカスタムヘッダーを追加しようとしているアクセス制御リクエスト・ヘッダー

$http({ 
     method : 'GET', 
     url : s, 
     headers : { 
     "partnerId" : 221, 
     "partnerKey" : "heeHBcntCKZwVsQo" 
     } 
    }) 

しかし、問題は、ヘッダーには、Accessに追加取得されています-controlリクエスト・ヘッダ403は、禁断以下と私はを取得していますよう応答:

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:50.0) 
Gecko/20100101 Firefox/50.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/ *;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Access-Control-Request-Method: GET 
Access-Control-Request-Headers: partnerid,partnerkey 
Origin: http://localhost:8080 
DNT: 1 
Connection: keep-alive 

私も変化の下にしようとしたが、運

return $http.get(s, { 
    headers : { 
     'partnerId' : 221, 
     'partnerKey': 'heeHBcntCKZwVsQo' 
     } 
    }) 

他の関連する回答では、ヘッダーpartnerIdとpartnerKeyをサーバー側で有効にする必要があることがわかりました。しかし、私はPOSTMANクライアントと他のPOSTクライアントにこれらのカスタムヘッダーを追加することができ、期待される応答を得ることができます。だから私は何かが足りないと思う。誰かがこれで私を導くことができますか?前もってありがとう

編集:私が指摘したもう1つの事は、partnerIdが要求を渡している間にpartneridとして置き換えられることです。違いがあるかどうかは分かりません。

答えて

3

スクリプトベースのクロスオリジン要求にCORS-safelisted request-headers以外のヘッダーを追加すると、ブラウザーが最初にdo a CORS preflight requestにトリガーされます。

ユーザーのブラウザがCORSプリフライトをやってしまうのを防ぐ方法はありません(ただし、Postmanを使用するなど、テストを行うときに自分のブラウザでローカルに回避する方法はあります)。

ユーザがカスタムヘッダーを使用してスクリプト化されたクロスオリジンリクエストを行うWebアプリケーションを使用できるようにするには、これらのクロスオリジンリクエストが実行されるサーバがCORS対応である必要があります。

Postmanがプリフライトを起こさずにそのような要求を行うことができる理由は、Postmanはブラウザエンジンではありません。これは拡張機能であり、CORSまたは同じ発信元ポリシーによって制限されません。

郵便配達員は基本的にはcurlや他のツールで可能なことはありますが、ブラウザのUIの中で便宜を図ることができます。そうでなければ、ブラウザに組み込まれた通常のWebセキュリティ機能をバイパスします。

+0

こんにちは@sideshowbarkerすぐにお返事ありがとうございます。つまり、ヘッダーpartnerIdとpartnerKeyを受け入れるためにサーバー側で変更を加える必要があると言っていますか? –

+0

@ SathiyaNarayananはい。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Access-Control-Allow-Headers( 'Access-Control-Allow-Headers'レスポンスヘッダについて)を参照してください。 – sideshowbarker

関連する問題