5

別のドメインでホストされている残りの Web サービスを使用する AngularJS ベースのアプリケーションを実装しています。次のスクリプトは CORS に使用され、Chrome と FireFox で完全に動作します。認証時に IE9 と Safari に問題があります。問題は、これらのブラウザーのwithCredentials属性にあるようです。IE と Safari が CORS をサポートする他の方法はありますか?

<script type="text/javascript">
     XMLHttpRequest.prototype.realSend = XMLHttpRequest.prototype.send;
     XMLHttpRequest.prototype.send = function(vData) {
        this.withCredentials = true;
        this.realSend.apply(this, arguments);
     };
</script>
4

1 に答える 1

7

私たちが試したさまざまなシナリオによると、次の要約を思い付くことができました。それが役に立つことを願っています。

  1. ブラウザーの仕様によると、IE10 以降および Safari 4 以降のバージョンは、XHR および withCredentials 属性をサポートしています。
  2. 上記のスクリプトのように、CORS に問題なく使用できます。
  3. 他の IE バージョン (9-) では、XDR を使用する必要があります。
  4. HTTPSに関しては、URL書き換えmodはサーバー側で成功しませんでした。

解決策は非常に簡単でした。デフォルトでは、IE と Safari はサードパーティの Cookie を無効にしています。ユーザーが資格情報を入力してログインすると、2 つの異なるドメインを使用するため、これらのブラウザーはその Cookie を保存できませんでした。そのため、他のすべてのリクエストは無許可でした。

サードパーティ Cookie を許可する手順

  • IE 10 - インターネット オプション > プライバシー > 詳細設定 > サード パーティの Cookie > 受け入れる
  • Safari - 設定 > プライバシー > Cookie をブロック > しない

この問題により、AngularJS バージョン 1.1.1+ では、「config」モジュールで「withCredentials」の値を設定することで簡単になっていることがわかりました ( $httpProvider.defaults.withCredentials = true;)

于 2013-10-08T12:28:05.400 に答える