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] Permission refusée XMLHttprequest


Sujet :

JavaScript

  1. #1
    Membre du Club
    Profil pro
    Developpeur
    Inscrit en
    Septembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Septembre 2004
    Messages : 114
    Points : 43
    Points
    43
    Par défaut [AJAX] Permission refusée XMLHttprequest
    Bonsoir,

    Je vais simplifier mon problème, je souhaite faire une marque blanche d'un systeme de vote en php.
    Pour cela j'ai une page php qiu génère du javascript de facon à pouvoir appeler cette derniere de cette maniere :
    <script langauge="mapage.php"></script>

    Dans mapage.php, je crée une nouvelle instance xmlhttprequest qui me permet de récuperer la page d'affichage de la photo.

    Il s'avère que lorsque je tape directement dans mon navigateur l'adresse où se situe mapage.php, tout s'affiche (il y a bien entendu les document.write en +) !
    Cependant lorsque je souhaite afficher via une balise script, j'ai une erreur dans laquelle on me dit que la permission est refusée d'appeler la méthode xmlhttprequest.open !

    A quoi cela est du ? Existe-il des solutions à mon problème ?

    Merci d'avance pour votre aide précieuse

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    À mon avis, tu tentes d'aller chercher la photo sur un site externe. Si c'est le cas, tu ne peux pas ... actuellement. Il faudra attendre des versions plus évoluées des navigateurs principaux.

    Si tu tentes d'aller chercher des photos sur ton site, ne mets pas des liens absolus, mais des liens relatifs au serveur : /photos/maPhoto.jpg au lieu de http://www.monsite.com/photos/maPhoto.jpg

  3. #3
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    J'ai eù le même problème aussi quand je faisiais mes premiers pas en Ajax. J'essayais d'ouvrire l'url "http://localhost" et j'avais des problèmes de securités. en cherchant un peu sur le web j'ai trouvé ce code qui permet d'activer les appeles en xmlrpc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        if (typeof netscape != 'undefined' && typeof netscape.security != 'undefined') {
    	netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');
        }
    (Attention uniquement pour firefox)

    Bonne chance !

    Y.Chaouche

  4. #4
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    C'est une règle de sécurité et mêm si certaine bidouilles font des trous il ne faut pas les utiliser

    bref XMLHttpRequest ne doit appeler que des pages sur le site d'ou il vient

    il existe une solution qui malheureusement d'est pas possible chez tous les hébergeur.
    le xhr appelle une page proxy.php sur son site d'origine qui prends en parametre l'url de la cible.
    il ouvre la cibe avec un fopen et renvois le résultat directement (sans traitement)

    A+JYT

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par sekaijin
    le xhr appelle une page proxy.php sur son site d'origine qui prends en parametre l'url de la cible.
    il ouvre la cibe avec un fopen et renvois le résultat directement (sans traitement)
    le xhr l'appel avec un open ? Sur proxy.php est sur un autre domaine, on se trouve confronté au même problème ... A moin que j'ai loupé un épisode !

    Je suis confronté au même problème et une solution me ferait bien plaisir

    Edit : J'ai trouvé quelques chose, j'esserais ce soir ;-)
    proxy.php

    Yo

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Ok ... autant pour moi, mon problème n'est pas exactement le même... je n'ai pas accés au domain où sera appelé mon script ajax, donc pas moyen de mettre ce fameux fichier proxy.php ... un idée pour mon cas ? ;-)

    Merci d'avance.

    Yo.

  7. #7
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    l'idée de passer par un proxi est d'avoir un proxy sur le serveur qui héberge la page contenant l'XHR ainsi il n'y a pas de restriction de sécurité

    A+JYT

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Oui, c'est bien ce que j'avais compris...

    Bon, j'ai opté pour la solution de créer dynamiquement une iframe dans la quel je met la page souhaité... c un peu du bricolage mais bon ca marche ;-)

    Merci à tous pour votre aide !

    Yo.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    bonjour !

    hé bien je rencontre ce type de problème !

    en fait donc j'ai réussi à créer un script qui récupère mes news les formatte et les affiche, problème cependant, quand je met le script javascript de la forme <script type="text/javascript src="http://monsite.com/ajax/doit.js"></script>
    sur un autre de mes sites il ne veut pas il me renvoie cette fameuse erreur:

    uncaught exception: Permission refusée d'appeler la méthode XMLHttpRequest.open

    et là ben, je me retrouve comme un con ...

    alors g parcouru le web cherchant des solutions et j'ai retenu celle du proxy et carrément une modif d'apache ...

    seulement c'est encore resté très flou pour moi...

    je ne sait pas quelle serai la meilleure solution et a vrai dire ca me les brise un peu d'aller modifier le fichier conf d'apache

    alors je vais essayer le proxy, avec espoir ...
    car mon but est bel et bien de pouvoir donner le script javascript pour que n'importe quel webmaster puisse le metre sur son site et donc afficher dynamiquement les dernières informations en fonction des flux xml du site .. fin bref !
    voilà

    @+++

    damien

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    salut !

    j'ai trouvé un compromis .. pour mon problème : sans proxy sans modifier apache.

    en fait g créé une page vierge (php mais elle aurai pu être html) avec le premier code qui recupère via xmlhttprequest le contenu du fichier xml le formatte et l'affiche.

    ensuite j'ai créé un autre script javascript qui lui n'utilise pas ajax mais juste javascript et innerhtml en créant un div vide puis en insérant dans le div un iframe de la page qui affiche le premier javascript.

    en fait si je devais chématiser :

    1. page autre site appelle 2
    2. fichier javascript qui écrit un iframe de 3
    3. fichier php ou html qui contient le javascript 4 (et uniquement ce javascript pas de header)
    4. premier javascript ou en fait tout se passe, xmlhttprequest, et formattage puis écriture des données contenues dans le fichier xml dynamique (php)


    et zou problème réglé pour mon compte ... je n'ai plus cette erreur !

    @++

    damien

  11. #11
    Membre du Club
    Profil pro
    Developpeur
    Inscrit en
    Septembre 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Developpeur

    Informations forums :
    Inscription : Septembre 2004
    Messages : 114
    Points : 43
    Points
    43
    Par défaut
    Après quelques jours où je ne pouvais plus m'en occuper je reviens avec un autre problème mais qui est surement lié.

    Voyez plutot :
    http://www.gaybesac.com/top/top_script2.php#

    Cette page s'affiche sous firefox mais impossible de l'afficher sous IE !?!?!?

    Le code de la page est celui la
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <html><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <script language="JavaScript" src="http://www.gaybesac.com/inc/index.js" ></script>
    <script language="JavaScript" src="http://www.gaybesac.com/inc/XHRConnection.js" />
    <script language="JavaScript" src="http://www.gaybesac.com/top/script.js" />
    </head>
    <body onload="init()">
    <div id="contenu"></div>
    </body></html>
    C'est tout simple la fonction init() crée un objet xhr qui va recuperer une page sur le serveur et l'afficher ! Le code javascript appelé est donc :

    Code : 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
    20
    21
    22
    23
    24
    25
    26
     
    var xhr = null;
    var n=0;
     
    function init(){
       ShowPage();
    }	
     
    function ShowPage(){ 
    	var nouDate = new Date();
        var XHR2 = new XHRConnection();	  
     
         XHR2.setDebugOn();
         XHR2.setRefreshArea('contenu');  
        XHR2.sendAndLoad("testt.php?"+nouDate.getTime(), 'GET',false);
    }
     
    function sendData(page, method)
    {
           var XHR = new XHRConnection();
            XHR.setDebugOn(); 
           XHR.sendAndLoad(page, method,false);
     
    		ShowPage();
     
    }
    Là je suis vraiment perdu, la classe XHRConnection est une classe permettant de gérer facilement les objet XHR (http://xhrconnection.sutekidane.net/) et je m'en sers autre part et cela fonctionne bien.

    Quelqu'un pourrait m'aider ?

    Merci d'avance

  12. #12
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Salut,

    Pourquoi créer deux objets XHR dans ton code ? un seul suffit.

    Y.Chaouche

  13. #13
    Membre expert

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 3 583
    Points
    3 583
    Par défaut Reconfig de la sécurité et iframe
    Pour le "problème" de permission refusée pour la méthode open de l'objet XMLHttpRequest, il n'y a pas de vraie solution.

    La reconfiguration par javascript de la sécurité Netsacpe n'empêche pas le problème (en tout cas, mes tests n'ont pas été concluant).

    L'idée de la IFRAME n'est utilisable qu'en cas d'envoi de données vers le serveur. En aucun cas elle ne peut-être utilisée pour lire des données depuis cette IFRAME (permission refusée de lire des données d'une page de domaine différent).

    Le seule méthode qui semble envisagée est un certificat SSL placé sur le serveur qui authentifie la sécurité des données.

    Mais vu le prix (scandaleux) de ces certificats, c'est pas à la portée de tout le monde.
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

  14. #14
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Ou alors un proxy

    C'est une page en langage serveur qui fait l'envoi pour toi et que fait en quelque sorte "relai"

    En ASP (.NET) après avoir ajouter MSXML.DLL au références :
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <%
      Dim Url as String = Request("XHR_URL")
      Dim Method as String = Request("XHR_METHOD")
      Dim Data as String = Request("XHR_DATA")
      Dim Xhr as new MSXML2.XMLHTTPREQUEST()
      Xhr.Open(Method, Url, False)
      Xhr.Send(Data)
      Response.WriteBytes(Xhr.ResponseBody)
    %>

    En JS tu fais ton appel comme ca : "proxy.aspx" en "POST" avec "XHR_URL=...&XHR_METHOD=...&XHR_DATA=..." comme data
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  15. #15
    Expert éminent
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Points : 9 127
    Points
    9 127
    Par défaut
    je vais même plus loin dans la définition du proxy pour éviter tout pb de détournement je fait sur mon serveur un service (JSON SOAP ...) qui exporte les fonctions dont j'ai besoin ce service lui même implément un skeleton (proxy) vers le(s) site(s) hébergent la fonction.

    ainsi si le service du site d'origine change seul le skeleton change et pas les client Ajax

    le client ajax n'accès qu'à des fonctions de SON application et rien d'autre c'est à l'application de les lui fournir. peut importe comment elle s'y prend.

    l'orsque vous demendez à google map une info sur le point X Y peut importe que google active dix applie derrière esplor de sbase ou lise un fichier c'est sont problème

    pour votre application il en va de même le client n'a pas à savoir ce qu'il s'y passe
    vous définnissez un enssemble de fonctionnalité et les modélité d'accès et c'est ça qui doit servir à construire le client.
    normalement il doit être possible d'écrire le client alors que l'appli n'existe pas et vice versa.

    A+JYT

  16. #16
    Membre averti
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2003
    Messages
    302
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2003
    Messages : 302
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par zecreator

    Mais vu le prix (scandaleux) de ces certificats, c'est pas à la portée de tout le monde.
    ça coute combien ?

  17. #17
    Membre expert

    Homme Profil pro
    Consultant
    Inscrit en
    Janvier 2006
    Messages
    1 376
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Consultant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 376
    Points : 3 583
    Points
    3 583
    Par défaut
    Un site de référence comme VeriSign, c'est 400$/an pour un certificat qui assure la sécurité de ton site. C'est le prix de départ. Pour les solutions pro, faut compter près de 1500$/an... Délirant...

    XMLHttpRequest n'autorise pas l'appel vers des domaines et/ou ports différents de la page qui appelle. C'est incontournable. Il faut obligatoirement appeler des domaines et ports identiques à la page en cours.

    Il n'y a pas moyen, avec XMLHttpRequest de contourner la sécurité.

    http://localhost est différent de http/localhost:8080, donc refusé !

    Il existe un moyen de contourner le problème, en effectuant une réponse du serveur avec du contenu Javascript (text/javascript au lieu de text/xml), et de faire des appels coté client par une balise "<SCRIPT>" dynamique.

    C'est chaud a coder, mais ça marche.
    "La révolution informatique fait gagner un temps fou aux hommes, mais ils le passent avec leur ordinateur !"

Discussions similaires

  1. [AJAX] Permission refusée XMLHttpRequest
    Par snipes dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 04/07/2008, 15h33
  2. [AJAX] Permission refusée XMLHttpRequest et URL rewriting !
    Par misterphil dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/07/2008, 14h58
  3. [AJAX] Permission refusée d'utiliser la méthode open
    Par DaSoul dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/11/2006, 06h34
  4. Permission refusée (...encore)
    Par KalHadj-Nikov dans le forum ASP
    Réponses: 11
    Dernier message: 27/04/2005, 09h20
  5. Réponses: 8
    Dernier message: 14/11/2003, 22h51

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