6

たぶん私は何かが完全に欠けているかもしれませんが、ローカルで実行されているサーバーがあり、$http リクエストに CORS を使用するように Angular を構成していません。localhost: に HTTP リクエストを送信すると<port>、Chrome が最初に OPTIONS リクエストを作成することがわかります。

IE 8 をサポートする必要があり、AngularJS は CORS では確実に動作しないため、CORS を削除する必要があります。

ラッパーを使用せPOSTにメソッドを直接設定しようとしましたが、役に立ちませんでした。おそらくこれはhttps://github.com/angular/angular.js/issues/1585に関連しています$http.post

また、コントローラーから直接jQuery ajaxポストを呼び出してみました-CORSオプションがfalseであっても(デフォルトでtrueに設定されているように見えたため)。それでも CORS リクエストが作成されます。

これの構成は何ですか?

4

1 に答える 1

21

CORS は、設定できる構成ではなく、リクエスト URL の結果です。オリジンがリクエスト URL のプロトコル/ドメイン/ポートと一致しない場合は、例外なく CORS リクエストが返されます。

たとえば、オリジンがhttp://www.example.com:8080の場合:

これは CORS リクエストです: http://example.com:8080/path.json (別のサブドメイン)

これは CORS リクエストです: http://www.example.com/path.json (別のポート)

これは CORS リクエストです: https://www.example.com:8080/path.json (別のプロトコル)

これはCORS リクエストではありません: http://www.example.com:8080/path.json (プロトコル、ドメイン、およびポートはすべてオリジンと一致します)

そうは言っても、標準ヘッダーの外側にヘッダーがあるため、 OPTIONS リクエストが発生しています(おそらく、リクエストに X-Requested-With ヘッダーがあります)。Angular.js では、次の方法でこれを削除できます。

angular.module('yourModuleHere')
    .config(function ($httpProvider) {
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
    });

Angular.js 1.2 以降では、X-Requested-With はデフォルトの共通ヘッダー リストに含まれていないことに注意してください。リストから削除する必要はありません。

于 2013-10-24T00:28:15.687 に答える