web-dev-qa-db-fra.com

Comment faire une requête interdomaine

Comme vous le savez, la sécurité du navigateur Web interdit de faire des requêtes entre domaines. J'ai lu un livre qui dit que vous ne devriez utiliser XMLHTTPRequest que si vous pouvez placer les fichiers sur le serveur (cela signifie que la page que vous allez charger se trouve dans le même domaine demandé). Si vous ne pouvez pas - vous devriez chercher une alternative.

Mes questions sont :

  1. Quelle est l'alternative interdomaine à XMLHTTPRequest?
  2. Qu'en est-il de WebSockets? Cette technologie permet-elle les requêtes entre domaines?

EDIT: Ce n'est toujours pas clair pour moi ...

Par exemple, je tire ma page de www.domain1.com et je dois demander le javascript à www.domain2.com. Donc, la page tirée devrait inclure quelque chose comme:

<script src="www.domain2.com/script.js"></script>

pour éviter les restrictions entre domaines.

Et je peux utiliser JSONP, et la requête ressemblera à ceci: http://ww.domain1.com/?callback=someFunction.js

Mais: n'est-ce pas pareil? Je viens de tirer js d'un autre domaine! Evite-t-il les restrictions entre domaines?

34
VB_

Vous pouvez effectuer des requêtes entre domaines à l'aide de l'objet XMLHttpRequest. Ceci est fait en utilisant quelque chose appelé "Partage de ressources d'origine croisée". Voir: http://en.wikipedia.org/wiki/Cross-Origin_resource_sharing

En termes très simples, lorsque la demande est faite au serveur, celui-ci peut répondre avec un Access-Control-Allow-Origin en-tête qui autorisera ou refusera la demande. Le navigateur doit vérifier cet en-tête et s’il est autorisé, il poursuivra le processus de demande. Sinon, le navigateur annulera la demande.

Vous pouvez trouver plus d'informations et un exemple de travail ici: http://www.leggetter.co.uk/2010/03/12/making-cross-domain-javascript-requests-using-xmlhttprequest-or- xdomainrequest.html

JSONP est une solution alternative, mais on pourrait dire que c'est un peu un bidouillage.

21
leggetter

Effectuer un appel interdomaine AJAX appelant

Votre service Web doit prendre en charge l’injection de méthode pour pouvoir utiliser JSONP.

Votre code semble correct et il devrait fonctionner si vos services Web et votre application Web sont hébergés dans le même domaine.

Lorsque vous faites un $ .ajax avec dataType: 'jsonp', ce qui signifie que jQuery est en train d'ajouter un nouveau paramètre à l'URL de la requête.

Par exemple, si votre URL est http://10.211.2.219:8080/SampleWebService/sample.do alors jQuery ajoutera? callback = {some_random_dynamically_generated_method}.

Cette méthode est plutôt un type de proxy attaché à un objet window. Ceci n’a rien de spécifique mais ressemble à quelque chose comme ceci:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}

Vérifiez les éléments suivants pour plus d'informations

Faire une requête jaxp ajax interdomaine avec jQuery

5
Arun Bertil

Si vous êtes prêt à transmettre des données et que vous n'avez pas besoin d'être sécurisé (informations publiques), vous pouvez utiliser un proxy CORS, c'est très simple, vous ne devez rien changer à votre code ni à votre serveur. (surtout si ce n’est pas votre serveur comme l’API de Yahoo ou OpenWeather). Je l'ai utilisé pour récupérer des fichiers JSON avec un XMLHttpRequest et cela a bien fonctionné.

4
Tarek Jellali