Developpez.com - Rubrique Dév. Web

Le Club des Développeurs et IT Pro

Navigateurs : Les dernières versions proposent des solutions d'AJAX entre domaines. Allons-nous vers une généralisation ?

Le 2009-07-07 13:16:51, par Bovino, Rédacteur
AJAX a depuis ses débuts été cantonné à des requête sur un même domaine.
Cette limitation était due à la politique de même origine (same origin policy) de JavaScript.
Mais avec l'émergence de nouveaux concepts d'internet (réseaux sociaux, widgets, web services), cette politique est désormais plus handicapante que protectrice pour les développeurs d'applications internet riches.

Avec la sortie récente des dernières versions des navigateurs (IE8, FF3.5, Safari 4), cette limitation commence à être levée et des solutions d'AJAX inter domaines sont désormais fournies.

Bien évidemment, on regrettera encore une fois que IE8 se démarque avec une méthode différente des autres navigateurs.

Pour en savoir plus :
Same Origin Policy
cross-site xmlhttprequest with CORS
HTTP access control

Que pensez-vous de cette évolution ?
Va-t-elle selon vous dans le sens d'une évolution souhaitable ou au contraire fragilise-t-elle un peu plus la sécurité des apllications Web ?
  Discussion forum
19 commentaires
  • SpaceFrog
    Rédacteur/Modérateur
    niveau securité .. faut voir les limitations du crossdomain
    c'est sur que ça faciliterait la tache de recupérer juste du texte ou du xml ..
  • stailer
    Membre chevronné
    Concrètement il y a déjà des navigateurs qui autorisent cela ?

    Par exemple, sous Firefox 3.5 ou XulRunner je peux faire des requêtes ajax sur plusieurs domaines ?
  • RomainVALERI
    Expert confirmé
    Pfff, dire que je m'étais galéré à en comprendre les tenants et les aboutissants de cette fameuse SOP...

    En tout cas, vu le nombre de messages sur le forum ajax à propos de ce genre de problèmes... ça va quand même faciliter la tâche à pas mal de monde je suppose
  • lunatix
    Rédacteur
    c'est une tres bonne nouvelle : et dans le contexte de la généralisation des web services de type REST/ et rest like (xml over http) : le navigateur va devenir la plate forme de mashup.
  • Bovino
    Rédacteur
    Envoyé par stailer
    Concrètement il y a déjà des navigateurs qui autorisent cela ?
    Oui, c'est précisément l'intérêt de la chose, voici un exemple (fourni dans le second lien du premier post) d'implémentation :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    var url = "http://bar.other/publicNotaries/"
    if(XMLHttpRequest)
    {
      var request = new XMLHttpRequest();
      if("withCredentials" in request)
      {
       // Firefox 3.5 and Safari 4
       request.open('GET', url, true);
       request.onreadystatechange = handler;
       request.send();
      }
      else if (XDomainRequest)
      {
       // IE8
       var xdr = new XDomainRequest();
       xdr.open("get", url);
       xdr.send();
     
       // handle XDR responses -- not shown here :-)
      }
     
     // This version of XHR does not support CORS  
     // Handle accordingly
    }
    On notera comme souvent que IE8 ne gère pas cela comme les autres...
  • DoubleU
    Membre expérimenté
    Pour une fois, je prefere l'approche de IE qui consiste à implémenter un objet différent que d'ajouter une propriété à l'objet XmlHTTPRequest car autant, avant FF3.5 et IE8 l'objet XHR ne présentait pas de risque (on maitrisait le serveur et le client), autant avec XDR, on ne doit avoir aucune confiance en la réponse du serveur.

    Avoir un objet différent permet de faire prendre conscience au développeur qu'il manipule un objet potentiellement dangereux. Cela permet également de restreindre l'utilisation dudit objet en cas de besoin administratif.
  • emmanuel.remy
    Expert confirmé
    Envoyé par DoubleU
    Pour une fois, je prefere l'approche de IE qui consiste à implémenter un objet différent que d'ajouter une propriété à l'objet XmlHTTPRequest car autant, avant FF3.5 et IE8 l'objet XHR ne présentait pas de risque (on maitrisait le serveur et le client), autant avec XDR, on ne doit avoir aucune confiance en la réponse du serveur.
    +1; d'autant plus qu'on se demande bien dans ces cas là à quoi sert la notion d'héritage

    Avoir un objet différent permet de faire prendre conscience au développeur qu'il manipule un objet potentiellement dangereux. Cela permet également de restreindre l'utilisation dudit objet en cas de besoin administratif.
    Encore une fois d'accord avec toi. Mais je tempérerais un peu car si on regarde les codes de base pour créer un objet xhr (dont celui de la FAQ) on s'aperçoit que cela passe quasiment à chaque fois par une fonction type (extrait de la faq):
    Code :
    1
    2
    3
    4
    5
    6
    7
    function getXMLHTTP(){
    var xhr=null;
    ...
    
    return xhr;
    }
    Donc on peut imaginer voir fleurir prochainement des fonctions similaires comme:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function getXDomainRequest() {
       var xdr = null;
       if (window.XDomainRequest) {
          xdr = new XDomainRequest(); 
       } else if (window.XMLHttpRequest) {
         xdr = new XMLHttpRequest(); 
       } else {
          alert("Pas de cross-domain avec ce navigateur !");
       }
       return xdr;	
    }
    Finalement les développeurs sauront toujours ce qu'ils appellent. Mais que cela aurait été plus simple si une nouvelle class avait été créée...

    ERE
  • JLC83
    Membre régulier
    En tous les cas c'est plutôt une bonne nouvelle !
    Parce que sincèrement, les <iframe>, les proxies, les services, ....
    Un peu lourd à gérer à force ;-)
    JL
  • balno
    Futur Membre du Club
    Ah oui, ça ça serait une bonne nouvelle, et désolé pour ce post...
    Ca doit être redondant...
  • CIFQ_Drew
    Membre averti
    Désolé si ce que je vais dire est une absurdité, mais n'étais-ce pas l'adage des Web Service de permettre ce genre de chose (par SOAP) : on envoie une request à un service Web pour une information et il nous retourne la réponse dans un fichier XML ?

    Pour ma part, je suis de l'avis de SpaceFrog, à savoir les limitations concernant le crossdomain.

    Y'a quelqu'un qui peut dire ce que cela implique ?!?