Avez vous déjà été confrontés à la problématique suivante : récupérer des informations venant d'un autre domaine que celui sur lequel vous vous trouvez. Comment faire? Il existe un moyen : le cross-domain. Qu'est ce que c'est ? Est-il possible de le faire sur un domaine comme localhost ?
Définition
Cross-domain signifie croisement de domaine. C'est un principe qui vise à faire communiquer deux domaines ensemble. Par exemple, monsite.com peut envoyer des données à tonsite.com ou à localhost, tout comme ce dernier peut renvoyer des données à monsite.com.
La plupart des techniques AJAX ne sont pas cross-domain pour des raisons évidentes de sécurité. Pour qu'une application cross-domain fonctionne, il faut que le domaine qui reçoit la requête soit autorisé à la traiter. C'est une mesure de sécurité obligatoire.
Techniques utilisées
Ajax
Ajax serait une méthode qui pourrait convenir. L’inconvénient étant que cette méthode n’est supportée que pour IE10 et supérieur, Chrome et Firefox n’ayant aucun problème.
XMLHttpRequest
XMLHttpRequest semble être la solution par excellence. Néanmoins celle-ci n’est pas supportée par IE8 et IE9.
XDomainRequest
XDomainRequest est utilisé seulement pour IE8.
Paramètres
Pour utiliser le cross-domaine, le serveur doit autoriser les connexions afin d’exécuter la requête. La réponse quant à elle doit avoir un en-tête précis.
Paramètres serveur
- Access-Control-Allow-Headers
En-tête utilisé pour la requête :
Origin, X-Requested-With, Content-Type, Accept
- Access-Control-Allow-Credentials
Permet d’inclure des informations d'identification utilisateurs afin d’effectuer la requête.
- Access-Control-Allow-Origin
Spécifie le domaine autorisé à faire le cross-domaine. Pour des mesures de sécurité, il est conseillé de bien renseigner ce champ.
- Access-Control-Allow-Methods
Définit la méthode utilisée pour la requête HTTP. POST sera utilisé.
Exemple d'implémentation IIS
Paramètres de la réponse
La réponse doit obligatoirement contenir les mêmes paramètres d’en-tête que le serveur.
Particularité
Si l’on veut faire du cross-domaine sur une machine local (localhost), et afin d’avoir un fonctionnement multi-navigateur, il est recommandé d’utiliser l’adresse IP locale au lieu du nom. Ex : http://127.0.0.1:8081/.
Conclusion
La création d’un cross-domain sur localhost nécessite une configuration particulière. L’utilisation de XMLHttpRequest et de XDomainRequest (pour IE8) sera donc recommandée. Nous éviterons dans la mesure du possible la méthode AJAX qui induit trop d’erreurs à son exécution. La construction des en-têtes de réponse a toute son importance, sans quoi aucune réponse ne sera renvoyée. Enfin pour un usage multi-navigateur, et afin de pallier à une sécurité trop élevée d’Internet Explorer ne pas oublier d’utiliser une adresse du type http://127.0.0.1 . Bon test @ tous !!