web-dev-qa-db-ja.com

CORSリクエストがMicrosoft Edgeで失敗するのに、他のブラウザーで機能するのはなぜですか?

JQueryを使用してOriginをまたがるAjaxリクエストを送信し、IE11、ChromeおよびFirefoxでは正常に動作していますが、Edgeでは次のエラーで失敗します:

SCRIPT7002:XMLHttpRequest:ネットワークエラー0x80070005、アクセスが拒否されました。

おもしろいのは、私がFiddlerを使用して、何が起こっていたのか、またFiddlerがいつ実行され要求をキャプチャするのかを把握しようとして、すべてがうまくいくことです。 Fiddlerを閉じるかキャプチャを一時停止すると、すぐに失敗します。

サイトはローカルマシン(webpack-dev-server)で実行されており、ローカルネットワーク経由でWebAPIサービスにリクエストを送信しています。

私のホストファイルは次のように設定されています:

127.0.0.1   local.myapp.test
192.168.0.111   api.myapp.test

サイトとAPIは同じ場所でホストされるため、実稼働環境では問題になりませんが、開発とテストには非常に貴重です。


更新:

Eric Lawのおかげで、Fiddlerを有効にした場合の動作が異なる理由がわかりました。Fiddlerが行うプロキシ設定の変更とイントラネットゾーンのセキュリティレベルが低いため、Edgeはローカルイントラネットゾーンに切り替わりました。

フィドラーフォーラムの回答

ローカルイントラネットゾーンのセキュリティレベルを中高に上げてインターネットゾーンに一致させ、次にFiddlerを使用して、CORS要求に対してEdgeが動揺する理由を突き止めます。

13
Jerome

FiddlerフォーラムでEric Lawrence(Fiddlerの作成者)が親切に提供してくれた回答を、逐語的に以下に記載します。

1つの可能性は、コンピューターがイントラネットゾーンで構成されており、そのイントラネットゾーンがプロキシ構成スクリプトに依存していることです: http://blogs.msdn.com/b/ieinternals/archive/2012/06/05/ the-local-intranet-security-zone.aspx 。 Fiddlerの実行中、プロキシ設定はFiddler自体に向​​けられます。

...イントラネットサイトをインターネットゾーンのサイトからのXHRのターゲットとして使用している場合、ここで働く別の要因があります。

Edgeは拡張保護モード(AppContainer)で実行されます。これには、インターネットゾーンプロセスからプライベートネットワークリソースへのアクセスをブロックする機能があります。 http://blogs.msdn.com/b/ieinternals/archive/2012/03/23/understanding-ie10-enhanced-protected-mode-network-security-addonsの「プライベートネットワークリソース」セクションを参照してください-cookies-metro-desktop.aspx 詳細については。

Local.myapp.test(SPAを実行しているURL)をインターネットオプションのローカルイントラネットゾーンに追加したところ、EdgeはFiddlerを必要とせずに満足しています。

3
Jerome

私はこの質問に出会い、いくつかのオプションを試した後、私が働いていたのは、すべてのゾーンサイトエントリから作業中のドメインを削除することでした。 local.myapp.testを例に使用して、「anysubdomain」.myapp.testのエントリをチェックし、すべてのサブドメインまたはワイルドカードエントリを含むすべてのゾーンからそれらを削除しました。

インターネットオプション(IE 11)でsecurityタブを選択し、 "Local intranet"で "sites"をクリックしてから "Advanced "で、関連するドメイン参照を削除しました。

信頼済みサイト」で「sites」をクリックし、関連するエントリをリストから削除しました

2
Dai Bok

Edge内のabout:flagsで、「localhostループバックを許可する(これによりデバイスが危険にさらされる可能性があります)」がチェックされていることを確認します。

1
Martin Beeby