IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

[AJAX] XMLHttpRequest cross domain


Sujet :

JavaScript

  1. #1
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut [AJAX] XMLHttpRequest cross domain
    Bonjour,

    Je cherche à faire une requete AJAX cross-domain. Mais comme je l'ai lu dans pas mal d'endroits, c'est impossible avec XMLHttpRequest.

    En revanche, j'ai lu plusieurs pistes :
    - par proxy
    - avec JSON

    Si vous pouviez un peu m'éclaircir les idées, car là j'avoue que ça me depasse un peu...
    Merci
    Sorry
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  2. #2
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Citation Envoyé par sorry60 Voir le message
    - par proxy
    Il suffit de mettre une page PHP sur ton serveur qui va chercher une page ailleurs sur le web.

    Citation Envoyé par sorry60 Voir le message
    - avec JSON
    Il dit qu'il voit pas le rapport... Javascript Object Notation? Mais qu'est ce que ça vient faire la dedans?

  3. #3
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    JSON est la syntaxe d'échanges de données.. elle te permet de passer des tableaux et autres variables que tu pourra directement intégrer à ton code car c'est supporté nativement par JS.

    Voici une classe HTTP et le proxy PHP pour faire du cross domain.
    Par contre, pour l'avoir essayé, je trouve que cela a ses limites..
    http://www.troywolf.com/articles/

    Attention : L'include de la cible, comme je l'avais conçu à la base, ne transfère par tous les headers HTTP

  4. #4
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Ok donc si j'ai bien compris, l'unique solution c'est par proxy, c'est à dire en passant par un fichier PHP se trouvant sur le même serveur que le JS
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  5. #5
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par denisC Voir le message
    Il dit qu'il voit pas le rapport... Javascript Object Notation? Mais qu'est ce que ça vient faire la dedans?
    Je parle de ça : Cross domain JSON
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 657
    Points : 910
    Points
    910
    Par défaut
    Citation Envoyé par sorry60 Voir le message
    Ok donc si j'ai bien compris, l'unique solution c'est par proxy, c'est à dire en passant par un fichier PHP se trouvant sur le même serveur que le JS
    Effectivement c'est le seul moyen pour utiliser XmlHttpRequest (enfin PHP ou une autre technologie serveur, mais il faut obligatoirement que ça se passe sur le même serveur que la page).


    Le "Cross domain JSON" est un autre moyen qui n'utilise pas l'objet XmlHttpRequest mais qui a la place crée un tag <script> dynamiquement avec une url de fichier externe. Le navigateur va alors charger et exécuter ce script, comme n'importe quel tag <script> crée non-dynamiquement. C'est très bien expliqué dans l'article que tu as linké
    Toute la documentation Ruby on Rails : gotapi.com/rubyrails
    Mes articles :
    > HAML : langage de template pour Ruby on Rails

  7. #7
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par Taum Voir le message
    Le "Cross domain JSON" est un autre moyen qui n'utilise pas l'objet XmlHttpRequest mais qui a la place crée un tag <script> dynamiquement avec une url de fichier externe. Le navigateur va alors charger et exécuter ce script, comme n'importe quel tag <script> crée non-dynamiquement. C'est très bien expliqué dans l'article que tu as linké
    Ok mais dans ce cas, le script du serveurA appelle un javascript sur le serveurB hors domaine ? ou n'importe quel autre script (php par exemple) ?
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  8. #8
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Citation Envoyé par sorry60 Voir le message
    Ok mais dans ce cas, le script du serveurA appelle un javascript sur le serveurB hors domaine ? -> Oui
    ou n'importe quel autre script (php par exemple) ? -> quel en est l'intérêt ?
    Le délire, c'est que (si j'ai bien compris) le script JS appelé est localisé sur la machine cible/le domaine cible. Du coup, le JS a les droits.
    ("On a les droits ! Et pour pas cher en plus !")

  9. #9
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Je viens d'essayer quelque chose :

    serveurA : avec JSON je charge un script.js situé sur un serveurB (hors domaine)
    serveurB : le script.js envoie une requete grace à XMLHttpRequest à script.php situé sur CE MEME serveurB.

    Resultat : permission refusée d'appeler la méthode XMLHttpRequest.open

    Donc on a pas les droits !

    Rectification : avec IE ça passe, mais pas avec Firefox
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  10. #10
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    En même temps tous les sites de comparateurs de prix utilisent ce système de cross domain sous forme d'API.
    C'est de la lecture de flux XML ou JSON peu importe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    // exemple proxy.php
    //
    // javascript peut communiquer avec ce script hébergé sur le même nom de domaine
    // http://www.serveur_a.com/proxy.php?action=toto&name=Youpla
    //
     
    header('Content-Type: text/xml; charset=UTF-8'); // pour du XML
    readfile('http://www.serveur_b.com/script.php?' . $_SERVER['QUERY_STRING']);
     
    ?>

  11. #11
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Mais c'est pas possible que le JSON load un script autre que js ? un script qui s'execute coté serveur et non coté client
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  12. #12
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    JSON load rien du tout, c'est une syntaxe d'écriture de données..
    Code JSON : Sélectionner tout - Visualiser dans une fenêtre à part
    { "Status": 1, "Id": 1, "Email": "toto@toto.fr", "Password": "toto" }

    C'est supporté nativement par Javascript..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var res = eval('('+xhr.responseText+')');
    res devient un tableau contenant les clés Status, Id, Email, etc.. et leur valeurs
    Tu y accèdes désormais par res.Email ..

    Mais c'est lisible par d'autres langages comme PHP

    Sinon pour rechercher la lib suivant ton langage, tu demandes à mon pote Google ton_langage + "librairie JSON" (il aime qu'on lui parle petit nègre)

  13. #13
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Là je crois qu'on s'ecarte un peu du sujet

    SI j'ai bien compris, JSON ne permet pas de faire des requetes cross-domain ?
    Car mon but c'est qu'un script.js se trouvant sur un serveur A, transmette une donnée à un serveur B pour que celui ci la traite. Il n'y a pas de transmission B => A, mais juste A => B.
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  14. #14
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Et bien utilise mon script PHP pour transmettre ta requête au Serveur B et dans ton script Serveur A, tu n'attends pas de réponse. Voilà tout !

    Ton JS (sur le Serveur A) attaque proxy.php (sur le Serveur A) qui s'occupe de transférer les données au Serveur B.


    Je ne connais pas bien la technique de Cross domain JSON expliquée sur http://snook.ca/archives/javascript/cross_domain_aj/

  15. #15
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Citation Envoyé par d-Rek Voir le message
    Et bien utilise mon script PHP pour transmettre ta requête au Serveur B et dans ton script Serveur A, tu n'attends pas de réponse. Voilà tout !

    Ton JS (sur le Serveur A) attaque proxy.php (sur le Serveur A) qui s'occupe de transférer les données au Serveur B.


    Je ne connais pas bien la technique de Cross domain JSON expliquée sur http://snook.ca/archives/javascript/cross_domain_aj/
    Eh non justement, sur le serveurA, je n'ai que le JS, rien d'autre, sinon ça aurait été facile
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  16. #16
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Ton serveur A est un IIS ?

  17. #17
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Non Apache pourquoi ?
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  18. #18
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    J'ai essayé un simple :

    JS (serveur A)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    document.location = "http://serveurB/script.php?donnee=toto";
    Mais ça ne fonctionne pas à tous les coups
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

  19. #19
    Membre confirmé Avatar de d-Rek
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    438
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2007
    Messages : 438
    Points : 455
    Points
    455
    Par défaut
    Bon je te conseille de revoir les tuto sur l'ajax

    Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function getXhr(){
    	var xhr = null;
    	if(window.XMLHttpRequest){ //Firefox et autres
    		xhr = new XMLHttpRequest();
    	}else if(window.ActiveXObject){ //Internet Explorer
    		try{xhr = new ActiveXObject("Msxml2.XMLHTTP");}
    		catch(e){xhr = new ActiveXObject("Microsoft.XMLHTTP");}
    	}else{
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    		xhr = false;
    	}
    	return xhr;
    }
     
    function ajax(){
    		var xhr=getXhr();
    		xhr.open("GET", "proxy.php?param=toto", true);
    		xhr.send(null);
    }

    La tu balances en GET des info à proxy donc à Serveur B et tu te fiches du résultats (affiché sur Serveur B et relayé par proxy.php)

    Si tu es sur un Apache, tu peux créer une page proxy.php comme je te l'ai dit !

    Désolé, mais ça sera ma dernière réponse pour ton problème.
    Revoie les tuto ajax et pose nous une vraie question.

  20. #20
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    Arrettez moi si je me trompe mais le proxy ne doit pas se trouver sur le meme domaine que le serveurA plutot ? et donc ainsi faire :

    JS (serveurA) ==AJAX==> proxy (serveurA) ==> PHP (serveur B)

    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/11/2016, 00h18
  2. Autoriser XMLHTTPRequest cross domain
    Par esperal dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 14/12/2015, 13h26
  3. [AJAX] ajax et cross domain scripting
    Par fabsys dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/03/2008, 22h32
  4. [AJAX] Ajax et https considéré comme cross-domain
    Par cassy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/08/2007, 18h41
  5. [Ajax] Cross domain et access denied
    Par Dinaïz dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 22/03/2006, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo