web-dev-qa-db-fra.com

Paramètre Firefox pour activer la demande Ajax entre domaines

J'ai besoin de temporally autoriser XMLHttpRequest interdomaine. Changer les paramètres de sécurité de Firefox semble être la voie à suivre. Mais j'ai essayé avec ceci et ceci mais ils n'ont pas fonctionné. Quelqu'un a-t-il déjà été capable de configurer cela? Merci.

47
Pablote

Pour les navigateurs modernes, vous pouvez essayer l’approche suivante:

https://developer.mozilla.org/en/HTTP_access_control

En bref, vous devez ajouter les éléments suivants dans l’en-tête de la réponse SERVER (les éléments suivants permettent l’accès defoo.example):

Access-Control-Allow-Origin: http://foo.example
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER
Access-Control-Max-Age: 1728000

Notez que X-PINGOTHER est l'en-tête personnalisé inséré par JavaScript et doit différer d'un site à l'autre.

Si vous souhaitez que tous les sites accèdent à votre serveur avec Ajax, utilisez plutôt *.


Modifier:

Quand j’ai répondu à la question de 2009 pour la première fois, j’ai rencontré le même problème et j’ai résolu ce problème en utilisant la configuration côté serveur.

Il n'y avait pas encore de plugin sur FF ou Chrome.

Cependant, nous avons maintenant des alternatives utilisant le plugin côté navigateur, veuillez vérifier la réponse de tsds

21
Walty Yeung

Si vous ne voulez pas perdre votre temps sur des problèmes inter-domaines lors du développement et des tests de votre application, vous pouvez utiliser l'addon Force CORS pour FF.

MISE À JOUR: Il semble que cet addon n'existe plus. Mais il y a une autre option - this Chrome extension

28
tsds

Avez-vous essayé d'utiliser ajax request de jQuery? A partir de la version 1.3, jQuery prend en charge certains types de requêtes ajax interdomaines.

Citant la référence ci-dessus:

Remarque: Toutes les demandes distantes (pas sur le même domaine ) Doivent être spécifiées comme GET quand 'script' ou 'jsonp' est le dataType (car il charge le script à l'aide d'une balise de script DOM). Options Ajax nécessitant un objet XMLHttpRequest ne sont pas disponibles pour ces demandes . Les fonctions complete et success sont appelé à la fin, mais ne le fait pas recevoir un objet XHR; le beforeSend et les fonctions dataFilter ne sont pas appelé.

À partir de jQuery 1.2, vous pouvez charger JSON données situées sur un autre domaine si vous spécifiez un rappel JSONP, qui peut être fait comme ça: "myurl? callback =?" . jQuery remplace automatiquement le? avec le nom de méthode correct à appeler, appeler votre rappel spécifié. Ou, si vous définissez le type de données sur "jsonp" a Le rappel sera automatiquement ajouté à votre demande Ajax.

9
tvanfosson

Voici la chose, il n'y a aucun moyen de "temporairement" désactiver XMLHttpRequest interdomaine, si vous pouvez le désactiver temporairement, il peut être désactivé de manière permanente. Ceci est un problème assez courant dans la programmation moderne AJAX et est le plus souvent résolu en utilisant la technique connue sous le nom de script interdomaine. 

L'idée est que si vous appelez un script interdomaine, il renvoie des résultats JavaScript (JSON) qui sont ensuite transmis à une fonction de votre côté. 

Voici un exemple de code pour illustrer son apparence du point de vue du code JavaScript:

  function request_some_data() {
    var s = "http://my.document.url.com/my_data?p1=v1&p2=v2&callback=myfunc";

      try {
        try{
          document.write("<scr"+"ipt type='text/javascript' src='"+s+"'></scr"+"ipt>");
        } 
        catch(e){
          var x = document.createElement("script");
          x.src = s;
          document.getElementsByTagName("head")[0].appendChild(x);
        }
      }
      catch (e) {
        alert(e.message);
      }
   }

Vous allez ensuite définir une fonction dans votre code qui reçoit les données et sur le serveur vous "manipulez" le cas de rappel, voici le code JavaScript côté client:

function myfunc(data) {
  alert(data);
}

Et du côté serveur, je donne ici un exemple PHP mais cela peut être fait aussi facilement en Java ou quelle que soit la technologie côté serveur que vous utilisez:

<?php
   if($_GET["callback"]) {
     print($_GET["callback"] . "(");
   }
   /* place your JSON object code/logic here */
   if($_GET["callback"]) {
     print(");");
   }
 ?>

Notez que ce que vous générez du côté du serveur finit par être du JavaScript qui est exécuté du côté client.

7
Michael

Je suis confronté à cela de file://. J'aimerais envoyer des requêtes à deux serveurs à partir d'un fichier HTML local (un banc d'essai).

Ce cas particulier ne devrait poser aucun problème de sécurité, mais seul Safari le permet.

Voici la meilleure discussion que j'ai trouvée sur le sujet.

2
akauppi

J'ai aussi essayé d'utiliser ce truc 'UniversalBrowswerRead' et cela n'a pas fonctionné. Vous pourrez peut-être ajouter un en-tête "autoriser", mais je n'ai pas encore essayé de le faire. C'est assez nouveau.

Vous pouvez trouver plus d'informations ici

2
Steve Willard

J'ai utilisé Fiddler comme proxy. Fiddler redirige les appels localhost vers un serveur externe.

J'ai configuré Firefox pour utiliser un proxy manuel (127.0.0.1 port 8888). Fiddler capture les appels et les redirige vers un autre serveur, à l'aide de filtres URL.

1
JoaquinG

Pourquoi ne pas utiliser quelque chose comme mod_proxy? Votre navigateur considère alors que les demandes sont dirigées vers le même serveur, mais elles sont réellement transférées vers un autre serveur.

1
Sarel Botha

Pour autoriser les domaines croisés:

  1. entrez about:config
  2. accepte de faire attention
  3. entrez security.fileuri.strict_Origin_policy dans la barre de recherche
  4. changer en faux

Vous pouvez maintenant fermer l'onglet. Normalement, vous pouvez maintenant faire une requête entre domaines avec cette configuration.

Voir ici pour plus de détails.

0
theCode

Vous pouvez consulter mon add-on pour Firefox. Il permet de traverser le domaine dans la dernière version de Firefox: https://addons.mozilla.org/en-US/firefox/addon/cross-domain-cors/

0
Tan Mai Van