web-dev-qa-db-fra.com

Edge sur Windows 10 bloquant l'appel ajax 32 bits à localhost avec une erreur réseau 0x2efd

Nous avons une application qui utilise SignalR pour communiquer localement avec les pilotes de scanneur en production depuis quelques années sous IE, Chrome et Firefox, qui n'ont pas de problème à extraire le fichier d'en-tête js de hubs pour SignalR. Lorsque Edge est sorti, nous avons eu du mal à parler à localhost et après de longs efforts pour trouver un paramètre lui permettant de communiquer (et de nombreuses heures avec un ticket Microsoft pour lequel aucune solution n’était trouvée), nous avons décidé d’ajouter des en-têtes pour permettre à Edge d’accorder accès au domaine:

Access-Control-Allow-Origin: https://localhost:11000

Cela semblait fonctionner, mais nous n’avons guère remarqué que cela fonctionnait pour un Windows 10 Edge 64 bits, mais pas sous Windows 10 32 bits. J'ai passé des heures à abaisser tous les paramètres de sécurité pour toutes les zones et à désactiver le mode protégé, à essayer différentes astuces pour extraire le fichier ajax, mais je continue à avoir l'erreur suivante:

SCRIPT7002: XMLHttpRequest: Network Error 0x2efd, Could not complete the operation due to error 00002efd.

Le pseudo-code suivant échoue:

$.ajax({
    url: "https://localhost:11000/signalr/hubs",
    crossDomain: true,
    success: function (data) {
        console.log("success");
    },
    error: function (jqXHR, textStatus, errorThrown) {
        console.log("error:");
        console.log(jqXHR);
    }
});

Je cherche un aperçu des paramètres ou de toute autre chose à essayer, ou si quelqu'un d'autre a déjà vu ce problème. Un autre élément d'information, le violoneux ne montre pas de trafic pour l'appel, il semble donc bloqué par le navigateur. Également sur le même ordinateur qui échoue avec Edge - IE, Chrome et FF réussiront.

15
Steven Edison

Votre demande manque les attributs suivants, ce qui devrait résoudre le problème.

  1. Méthode de requête: GET, POST, etc.
  2. Demander le type de contenu (en-tête): application/json, etc. 
  3. Type de données de la requête (en-tête): json, XML, etc. 

Regardez également l'extrait de code suivant:

type:"POST",
contentType:"application/json; charset=utf-8",
dataType:"json"
1
GLES

vous pouvez essayer ça. 

    $.ajax({
        url:url,
        type:"POST",
        data:data,
        contentType:"application/json; charset=utf-8",
        dataType:"json",
        success: function(){
        //
        }
    });

et assurez-vous de fournir correctement les paramètres, type de contenu, type de données, code de réponse, etc.

0
Atif Hussain

J'ai eu le même problème. Alors que les appels Ajax vers une page du même domaine fonctionnaient dans tous les autres navigateurs, ils ne le faisaient pas dans Edge. Ouvrir l'URL utilisée pour l'appel Ajax dans un onglet différent donnerait les résultats corrects. L'ajout du morceau de code à la page servant les appels Ajax l'a corrigé en quelque sorte ... Le code est en C # mais peut-être que donner une idée générale comment résoudre ce problème dans d'autres langues.

    if (Request.UserHostName == "127.0.0.1")
        Response.AppendHeader("Access-Control-Allow-Origin", "*");
0
VDWWD

J'ai eu le même problème avec Edge. Le correctif nécessitait des modifications dans l'appel ajax et le serveur exécuté sur localhost.

En appel ajax je devais changer de vieux text/plain à application/json

contentType: 'application/json; charset=utf-8',

Le serveur local utilisait Jersey, alors j'ai ajouté l'implémentation ContainerResponseFilter qui ajoute les en-têtes Access-Control-Allow-Headers et Access-Control-Allow-Methods. Access-Control-Allow-Origin était déjà en place.

res.getHeaders().add("Access-Control-Allow-Headers", "Origin, content-type, accept, authorization");
res.getHeaders().add("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
0
Mika

Essayez-le en mode de compatibilité IE en accédant aux outils de développement et en sélectionnant dans le menu déroulant supérieur, si l'erreur persiste, il est probable que certains fichiers système Windows IE les usages. Cet appel utilise-t-il l'authentification avec des certificats? Peut-être que le certificat est obsolète ou que Edge utilise une méthode d'authentification différente? Vérifiez l'onglet Sources dans IE (compatible et non compatible) pour voir si la ressource est en cours de chargement, car Fiddler ne capture que le trafic HTTP et HTTPS. Cela devrait vous orienter dans la bonne direction en ce qui concerne les erreurs, etc. Enfin, vous pouvez peut-être juste coder une application C # qui fait une demande à la même URL, il est possible que la nouvelle version de .NET utilise les mêmes dépendances appel. Si tel est le cas, C # vous donnera suffisamment d'erreur descriptive pour résoudre le problème.

0
TechnicalTophat