web-dev-qa-db-ja.com

Angular POST POSTMANの動作中のOriginエラーのクロス

POST from my angular login service:

$http.post('https://xyz/login',
            {
                headers: {
                    'Content-type': 'application/json',
                    'Accept': 'application/json',
                    'signature': 'asd'
                }

そして私はこのエラーを受け取ります:

XMLHttpRequest cannot load https://xyz/login. Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.

私はこのヘッダーを試しました:

$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];

そして、これら:

"Access-Control-Allow-Origin": "*";
"Access-Control-Allow-Headers": "X-Requested-With";
"Access-Control-Allow-Methods": "GET, POST", "PUT", "DELETE";

興味深いのは、ポストマンが機能することです。私は何をしなければなりませんか?

ありがとう。

15
user3712353

リクエストに単純でないヘッダーContent-typesignatureが含まれていますが、これらはレスポンスのAccess-Control-Allow-Headersヘッダーに含める必要があります。

Content-typeは単純なヘッダーの場合もありますが、特定の値のみです。application/jsonはこれらの値の1つではないため、Content-typeが単純ではなくなります。)

サーバーのプリフライト応答でContent-typeAccess-Control-Allow-Headersに追加します。

POSTMANはsame-Originポリシーに拘束されないため、サーバーからのCORSサポートは必要ありません。

6
apsillers

ブラウザはPOSTする前にOPTIONSリクエストを行っていますか?以前に問題があったNETタブを確認してください。ブラウザからOPTIONSリクエストが発行されているか、Angular(どちらかわからない)で、サーバーにはありませんでした...

"Access-Control-Allow-Methods": "GET、POST"、 "PUT"、 "DELETE"、 "OPTIONS";

2
danday74

必要な情報がすでにあるかどうかはわかりません。しかし、私のローカルWebサーバー-ここでpostmanを使用してhttp要求を行うと、ヘッダーに追加されます。

ヘッダー:{ホスト: 'localhost'、接続: 'keep-alive'、プラグマ: 'no-cache'、 'cache-control': 'no-cache'、 'user-agent': 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML、like Gecko)Chrome/47.0.2526.106 Safari/537.36 '、accept:'/ '、referer:' http:// localhost / '、' accept-encoding ':' gzip、deflate、sdch '、' accept-language ':' en-US、en; q = 0.8 '}、

そして、これがrawHeadersに表示されるものです:['Host'、 'localhost'、 'C​​onnection'、 'keep-alive'、 'Pragma'、 'no-cache'、 'C​​ache-Control'、 'no-cache' 、 'User-Agent'、 'Mozilla/5.0(Windows NT 10.0; WOW64)AppleWebKit/537.36(KHTML、like Gecko)Chrome/47.0.2526.106 Safari/537.36'、 'Accept'、 '/ '、' Referer '、' http:// localhost / '、' Accept-Encoding '、' gzip、deflate、sdch '、' Accept-言語 '、' en-US、en; q = 0.8 ']、

そのため、おそらくクライアントを偽造して、認識されたブラウザクライアントにする必要があるだけかもしれません。

0
Tim