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

Le , 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 ?


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de balno balno - Futur Membre du Club http://www.developpez.com
le 24/07/2009 à 2:28
Ah oui, ça ça serait une bonne nouvelle, et désolé pour ce post...
Ca doit être redondant...
Avatar de CIFQ_Drew CIFQ_Drew - Membre averti http://www.developpez.com
le 29/07/2009 à 14:33
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 ?!?
Avatar de lunatix lunatix - Rédacteur http://www.developpez.com
le 29/07/2009 à 17:15
ben, si sauf que un web service, c'est pas forcement Soap, mais aussi d'autres protocoles moins deb... plus simples (xml over http, Rest, protocol buffer, json etc...)

et du coup, le navigateur peut devenir la plate forme d'utilisation de ces web services, plutot que de passer par une couche applicative serveur
Avatar de Bovino Bovino - Rédacteur http://www.developpez.com
le 29/07/2009 à 19:12
Citation Envoyé par CIFQ_Drew  Voir le message
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 ?

Tu ne peux pas le faire directement avec AJAX... Il te faut une couche serveur pour parer la Same Origin Policy !
Avatar de CIFQ_Drew CIFQ_Drew - Membre averti http://www.developpez.com
le 29/07/2009 à 22:06
Alors si je comprends bien, on ne peut pas appeler un Web Service par JavaScript si le Web Service en question est sur un autre domaine ? Est-ce que j'ai mal compris vos commentaire ?
Avatar de stailer stailer - Membre chevronné http://www.developpez.com
le 02/08/2009 à 19:40
Je pense que tu confonds Webs Services et Ajax.

Les Webs Services via SOAP permettent de communiquer "entre langages" en passant par le protocole XML.

Exemple : je peux développer un web service en DotNet C# qui me renvoie des clients de ma base de données SQL Server.
Je vais pouvoir alors, en Java par exemple, me récupérer d'une manière très simplifiée, cette fonction sur mon serveur DotNet pour afficher dans une page JSP la liste de ces clients, donc grâce à la WSDL.

Je fais un bouton sur ma page JSP, la page se relance, le code serveur va chercher le web service et enfin la page affiche ces informations.

Maintenant, je veux afficher cette liste dans ma page JSP, mais en Ajax. Quand je vais cliquer sur mon bouton je ne veux pas que la page se recharge, mais affiche dans une balise <div id="content"></div> le résultat directement.

Il va donc falloir passer par du Javascript. Les navigateurs ne pouvaient pas jusqu'à aujourd'hui me donner cette autorisation.

Et bien maintenant, grâce à Ajax "inter domaines" , c'est possible..

En espérant avoir été à peu près clair..
Avatar de CIFQ_Drew CIFQ_Drew - Membre averti http://www.developpez.com
le 03/08/2009 à 4:13
Oui merci stailer, ton exemple ma éclaircie un peu!!!
Avatar de sebhm sebhm - Membre éprouvé http://www.developpez.com
le 11/10/2009 à 12:32
Bonjour,

Désolé de déterrer ce post 2 mois apres, mais je n'ai pas tout compris...

Citation Envoyé par stailer  Voir le message
Je fais un bouton sur ma page JSP, la page se relance, le code serveur va chercher le web service et enfin la page affiche ces informations.

Maintenant, je veux afficher cette liste dans ma page JSP, mais en Ajax. Quand je vais cliquer sur mon bouton je ne veux pas que la page se recharge, mais affiche dans une balise <div id="content"></div> le résultat directement.

Il va donc falloir passer par du Javascript. Les navigateurs ne pouvaient pas jusqu'à aujourd'hui me donner cette autorisation.

Pourquoi n'était-ce pas possible avant en AJAX ?
L'objet XHR va communiquer avec une page 'serveur' qui, elle, aura tout lieu d'invoquer le web service, récupérer les infos et les renvoyer vers le client via XHR... non ?
L'avantage est qu'on peut faire une requete inter-domaine directement ?
merci de vos lumieres
Avatar de Jcpan Jcpan - Membre averti http://www.developpez.com
le 19/02/2010 à 17:30
Bonjour

je detere ce post. Je viens d'essayer ça marche pas chez moi ça donne

Objet non trouvé!

L'URL requise n'a pu etre trouvée sur ce serveur. La référence sur la page citée semble être erronée ou perimée. Nous vous prions d'informer l'auteur de cette page de cette erreur.

Si vous pensez qu'il s'agit d'une erreur du serveur, veuillez contacter le gestionnaire du site.
Error 404
localhost
19/02/2010 17:27:04
Apache/2.2.12 (Win32) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k mod_autoindex_color PHP/5.3.0 mod_perl/2.0.4 Perl/v5.10.0



Edit : avec Firefox/3.5.7

ça nécessite un traitement sur le serveur ?
Avatar de Jcpan Jcpan - Membre averti http://www.developpez.com
le 19/02/2010 à 18:29
ok d'apres cette page il faut une autorisation sur le serveur distant.

#

William Edney wrote on July 6th, 2009 at 4:41 pm:

Arun -

Thanks for the excellent example. I grabbed the ‘Simple Example’ page, saved it to my file system, reloaded that page into another window using the ‘file:///’ URL and tried to invoke the cross-site query. This failed in both Firefox 3.5 (Mac) and Safari 4 (Mac).

Is there some reason this isn’t working? Given that the W3 defines ‘file:///’ URLs as a valid origin, this should work IMHO.

Cheers,

- Bill

Reply
#

William Edney wrote on July 6th, 2009 at 4:48 pm:

Arun -

Ok, so maybe I’m being an idiot and your server is only authorizing the domain that you’re calling from in your example and not ‘*’.

Hmmm…

Cheers,

Mais comment je crée cette autorisation ?
Avatar de Lcf.vs Lcf.vs - Membre éclairé http://www.developpez.com
le 20/03/2010 à 14:27
Citation Envoyé par Bovino  Voir le message
Code : Sélectionner tout
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
 
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 
}

Code : Sélectionner tout
1
2
3
 
// Selon les spécifications W3C 
request.onload=handler;
Même Microsoft a fait l'effort...

Citation Envoyé par Bovino  Voir le message
On notera comme souvent que IE8 ne gère pas cela comme les autres...

Un exemple?
Offres d'emploi IT
Développer une application gestion clientele
services energies - Ile de France - villeneuve d'ascq
Développeur android H/F
Mobiskill - Ile de France - Paris (75000)
Développeur ios
iD.apps - Ile de France - Boulogne-Billancourt (92100)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique Accueil