47 votes

Paramètre Firefox pour activer les requêtes Ajax inter-domaines

J'ai besoin de dans le temps autoriser les XMLHttpRequest interdomaines. Changer les paramètres de sécurité de Firefox semble être la solution. Mais j'ai essayé avec este y este mais ils n'ont pas fonctionné. Quelqu'un a-t-il déjà réussi à configurer ce système ? Merci.

0 votes

Si vous pouvez exiger de modifier les paramètres de sécurité de Firefox, ne pourriez-vous pas utiliser un script de GreaseMonkey ?

1 votes

Essayez-le sur Chrome : stackoverflow.com/questions/3102819/

0 votes

Essayez mon add-on Firefox pour activer le cross domain avec ajax ici : addons.mozilla.org/en-US/firefox/addon/cross-domain-cors

27voto

tsds Points 1706

Si vous ne voulez pas perdre votre temps à résoudre des problèmes liés à l'interdomaine pendant le développement et les tests de votre application, vous pouvez utiliser l'extension Forcer CORS pour FF.

MISE À JOUR : Il semble que cet addon n'existe plus. Mais il existe une autre option - celle-ci Extension Chrome

9 votes

Forcecors est génial. Il faut savoir qu'après l'installation, il faut cliquer sur View => toolbars => add-on bar. Ensuite le bouton cors apparaîtra en bas à droite, cliquez dessus pour l'activer. J'ai décompressé le xpi et j'ai vu qu'il y avait une fonction de basculement lorsqu'un bouton était enfoncé, mais je n'ai jamais vu le bouton.

5 votes

"Il faut savoir qu'après l'installation, il faut cliquer sur Affichage => Barres d'outils => Barre d'ajouts." Vous, monsieur, êtes un saint

7 votes

Il semble que FF l'ait supprimé.

22voto

Walty Points 1147

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

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

En bref, vous devez ajouter ce qui suit dans le fichier SERVER l'en-tête de réponse (ce qui suit permet l'accès de foo.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 le X-PINGOTHER est l'en-tête personnalisé qui est inséré par JavaScript, et doit différer d'un site à l'autre.

Si vous voulez que n'importe quel site accède à votre serveur en Ajax, utilisez * à la place.


Edita:

Quand j'ai répondu à la question en 2009 J'ai rencontré le même problème et je l'ai contourné en utilisant la configuration côté serveur.

Il n'y avait pas de plugin sur FF ou Chrome à cette époque.

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

4 votes

Si je comprends bien, cela ne résout pas le problème original si vous ne pouvez pas changer le serveur

1 votes

Notez que Access-Control-Allow-Origin: * ne fonctionnera pas si vous souhaitez également utiliser les XHR. withCredentials pour envoyer les en-têtes de cookies. Dans ce cas, vous devez spécifier un domaine spécifique.

11 votes

-1 Il ne répond pas à la question. L'OP demande une configuration côté navigateur

9voto

tvanfosson Points 268301

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

Citation de la référence ci-dessus :

Note : Toutes les personnes distantes (ne se trouvant pas sur le même domaine) doivent être spécifiées comme en tant que GET lorsque 'script' ou 'jsonp' est le dataType (parce que cela charge script en utilisant une balise DOM script). Options Ajax qui nécessitent un objet XMLHttpRequest ne sont pas disponibles pour ces requêtes. Les fonctions complete et success sont appelées à la fin de la requête, mais ne reçoivent pas d'objet XHR ; les fonctions beforeSend et dataFilter ne sont pas appelées.

A partir de jQuery 1.2, vous pouvez charger des données JSON situées sur un autre domaine si vous spécifiez un callback JSONP, qui peut être fait comme ceci : "myurl?callback= ?". jQuery remplace automatiquement le ? par le nom de la méthode correcte à appeler, en appelant votre callback spécifié. Ou bien, si vous définissez le dataType à "jsonp", un sera automatiquement ajouté à votre requête Ajax.

0 votes

Nous l'utilisons pour récupérer des données json, mais c'est du html qui est incorporé dans la page et c'est seulement temporel, donc changer la configuration de firefox devrait être la chose la plus simple à faire

2 votes

Pourquoi le downvote ? L'utilisation des capacités inter-domaines d'un framework est une réponse raisonnable à cette question. Le fait que le HTML soit nécessaire n'était pas mentionné dans la question, mais seulement dans le commentaire de ma réponse.

7voto

Michael Points 943

Il n'y a aucun moyen de désactiver "temporairement" XMLHttpRequest interdomaines. Si vous pouvez le désactiver temporairement, vous pouvez le désactiver définitivement. Il s'agit d'un problème assez courant dans la programmation AJAX moderne et il est le plus souvent résolu à l'aide de la technique connue sous le nom de scripting interdomaine.

L'idée est que si vous faites appel à un script inter-domaines, celui-ci renvoie des résultats JavaScript (JSON) qui sont ensuite transmis à une fonction de votre côté.

Voici un exemple de code pour illustrer comment cela peut se présenter 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 définirez alors une fonction dans votre code qui reçoit les données et dans le serveur vous "gérez" le cas de rappel, voici le JavaScript côté client :

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

Et côté serveur, je donne ici un exemple en PHP, mais cela peut être fait tout aussi facilement en Java ou toute autre technologie côté serveur :

<?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 se transforme en JavaScript qui est exécuté du côté du client.

16 votes

"<scr"+"ipt" ça a l'air si malicieux

4 votes

Bien sûr, vous pouvez le désactiver temporairement. Par exemple, lancez Chrome avec --disable-web-security.

0 votes

@JosephLust Veuillez noter que cette question a été posée/répondue un peu avant que Chrom ne soit largement utilisé.

2voto

Steve Willard Points 5985

J'ai aussi essayé d'utiliser ce truc 'UniversalBrowswerRead' et ça n'a pas marché. Vous pourriez être en mesure d'ajouter un en-tête "allow", mais je n'ai pas encore essayé de le faire. C'est assez récent.

Vous pouvez trouver plus d'informations ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X