Accès refusé dans IE 10 et 11 lorsque la cible ajax est localhost

j'essaie de faire un appel ajax entre un serveur (http) qui est sur internet. Et cible ça à mon propre localhost. FF / Chrome / etc... travail. C'est SEULEMENT un IE problème. IM USING IE 11 AND 10.

la demande n'est même pas faite. Le" refus d'accès " est lancé instantanément.

voici le code. Juste pour vous voir.

n'est pas L'erreur HTTP/HTTPS classique dans IE8 et IE9. C'est autre chose, mais la documentation n'est pas utile.

$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) {}

le statut est 0xhr de l'objet et de l'erreur "accès Refusé"

32
demandé sur Nilesh Thakkar 2014-02-28 18:45:06

5 réponses

Internet Explorer soulève cette erreur dans le cadre de sa fonction zones de sécurité. En utilisant les paramètres de sécurité par défaut, une erreur" Accès refusé "est soulevée lorsque vous tentez d'accéder à une ressource dans la zone" intranet Local "à partir d'une origine dans la zone" Internet".

si vous écriviez votre code Ajax manuellement, Internet Explorer soulèverait une erreur lorsque vous essayez d'ouvrir la ressource. Par exemple:

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

Vous pouvez contourner cette erreur en ajoutant le site d'origine pour la zone de sécurité des "sites de confiance". Vous pouvez le tester en ajoutant "http://client.cors-api.appspot.com" à votre "sites de Confiance" de la zone et à l'aide de cette page de test test-cors.org avec votre localhost site que l'URL Distante.

41
répondu oobug 2014-04-09 21:35:20

en plus de l'exigence du site de confiance j'ai constaté que le problème n'a pas été corrigé jusqu'à ce que je utilisé le même protocole pour la demande de mon origine, par exemple mon site de test a été hébergé sur un https mais a échoué avec n'importe quelle destination utilisant http (sans le s).

ceci ne s'applique qu'à IE, Chrome enregistre simplement poliment un avertissement dans la console de débogage et n'échoue pas.

15
répondu Martin Laukkanen 2014-09-02 14:26:39

si vous tentez de faire des requêtes ajax d'origine croisée dans IE9, vous devrez utiliser XDomainRequest au lieu de XMLHttpRequest. Il y a un plug-in jQuery qui enveloppe XDR. Vous devez être conscient qu'il y a des limites notables de XDR.

une Autre option serait d'utiliser une bibliothèque comme ceci: https://github.com/jpillora/xdomain.

3
répondu Ray Nicholus 2017-05-30 14:03:38

jQuery implémente les appels ajax en utilisant le XMLHttpRequest objet qui n'est pas supporté dans IE9. Vous devez vous forcer à utiliser XDomainRequest à la place.

j'ai contourné ce problème en utilisant ce plugin jQuery:

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

2
répondu Jamie Holdstock 2018-01-03 22:19:26

Remarque:

Ne pas utiliser "