web-dev-qa-db-ja.com

ajaxターゲットがローカルホストの場合、IE 10および11でアクセスが拒否されました

インターネット上にあるサーバー(http)の間でajax呼び出しをしようとしています。そして、それを自分のローカルホストに向けます。 FF/Chrome/ETC ...動作します。 IE issue。IM USING IE 11 AND 10。

要求は行われません。 「拒否されたアクセス」は即座にスローされます。

これがコードです。あなたが見るためだけに。

IE8およびIE9の古典的なHTTP/HTTPSエラーではありません。これは別のものですが、ドキュメントは役に立ちません。

$jq.ajax({
            contentType: 'application/json',
            url: url,
            dataType: 'json',
            crossDomain: true,
            beforeSend: function (xhr) {
                xhr.withCredentials = true; 
                xhr.setRequestHeader("Authorization", "Basic " + $jq.base64.encode(username and password));
            },
            success: function (data, status, headers) {},
            error: function (xhr, status, error) {}

ステータスは0xhrオブジェクトにあり、エラーは「アクセス拒否」です

37
narc88

Internet Explorerは、セキュリティゾーン機能の一部としてこのエラーを発生させます。デフォルトのセキュリティ設定を使用すると、「インターネット」ゾーンのオリジンから「ローカルイントラネット」ゾーンのリソースにアクセスしようとすると、「アクセスが拒否されました」エラーが発生します。

Ajaxコードを手動で記述している場合、リソースを開こうとするとInternet Explorerでエラーが発生します。例えば:

var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://localhost/', true); // This line will trigger an error
xhr.send();

Originサイトを「信頼済みサイト」セキュリティゾーンに追加することにより、このエラーを回避できます。これをテストするには、「http://client.cors-api.appspot.com」を「信頼済みサイト」ゾーンに追加し、このテストページをローカルサイトで test-cors.org で使用します。リモートURLとして。

44
oobug

信頼できるサイトの要件に加えて、私はリクエストに同じオリジンと同じプロトコルを使用、例えば私のテストサイトはhttpsでホストされていましたが、httpを使用した宛先で失敗しました(sなし)。

これはIEにのみ適用されます。Chromeはデバッグコンソールに警告を丁寧に記録するだけで失敗しません。

17

IE9でクロスオリジンAjaxリクエストを作成しようとしている場合、XDomainRequestの代わりにXMLHttpRequestを使用する必要があります。 XDRをラップするjQueryプラグインがあります。 XDRにはいくつかの顕著な制限があることに注意してください。

別のオプションは、次のようなライブラリを使用することです: https://github.com/jpillora/xdomain

3
Ray Nicholus

jQueryは、IE9でサポートされていないXMLHttpRequestオブジェクトを使用してajax呼び出しを実装します。代わりにXDomainRequestを使用するように強制する必要があります。

このjQueryプラグインを使用してこの問題を回避します。

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

2
Jamie Holdstock