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";
興味深いのは、ポストマンが機能することです。私は何をしなければなりませんか?
ありがとう。
リクエストに単純でないヘッダーContent-type
とsignature
が含まれていますが、これらはレスポンスのAccess-Control-Allow-Headers
ヘッダーに含める必要があります。
(Content-type
は単純なヘッダーの場合もありますが、特定の値のみです。application/json
はこれらの値の1つではないため、Content-type
が単純ではなくなります。)
サーバーのプリフライト応答でContent-type
をAccess-Control-Allow-Headers
に追加します。
POSTMANはsame-Originポリシーに拘束されないため、サーバーからのCORSサポートは必要ありません。
ブラウザはPOSTする前にOPTIONSリクエストを行っていますか?以前に問題があったNETタブを確認してください。ブラウザからOPTIONSリクエストが発行されているか、Angular(どちらかわからない)で、サーバーにはありませんでした...
"Access-Control-Allow-Methods": "GET、POST"、 "PUT"、 "DELETE"、 "OPTIONS";
必要な情報がすでにあるかどうかはわかりません。しかし、私のローカル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'、 'Connection'、 'keep-alive'、 'Pragma'、 '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-言語 '、' en-US、en; q = 0.8 ']、
そのため、おそらくクライアントを偽造して、認識されたブラウザクライアントにする必要があるだけかもしれません。