Une question sur le domaine multi-domaine (sous-domaine) ajax request

Disons que j'ai la page principale chargée à partir de http://www.example.com/index.html . Sur cette page, il y a un code js qui fait une requête ajax à http://n1.example.com//echo?message=hello . Lorsque la réponse est reçue, un div sur la page principale est mis à jour avec le corps de réponse.

Cela fonctionnera-t-il sur tous les navigateurs populaires?

Modifier:

La solution évidente est de mettre un proxy devant www.example.com et n1.example.com et de le configurer afin que toutes les demandes d'accès à une sous-ressource de http://www.example.com/n1 soient appliquées à http: //n1.example.com/ .

Le domaine transversal est entièrement un sujet différent. Mais le sous-domaine croisé est relativement facile. Tout ce que vous devez faire est de définir le document.domaine comme étant identique à la fois dans la page parent et dans la page iframe.

document.domain = "yourdomain.com" 

Plus d'infos ici

Une autre solution qui peut ou non fonctionner pour vous est d'insérer / supprimer dynamiquement des tags de script dans votre DOM qui indiquent le domaine cible. Cela fonctionnera si la cible renvoie json et prend en charge un rappel.

Fonction pour gérer le résultat:

 <script type="text/javascript"> function foo(result) { alert( result ); } </script> 

Au lieu de faire une requête AJAX, vous devez insérer dynamiquement quelque chose comme ceci:

 <script type="text/javascript" src="http://n1.example.com/echo?callback=foo"></script> 

Tous les navigateurs modernes prennent en charge CORS et dorénavant, nous devrions exploiter cette addition.

Il fonctionne sur une technique de handshaking simple si les 2 domaines qui se communiquaient se faisaient confiance par des en-têtes HTTP envoyés / reçus. Cela a été longtemps attendu car la même politique d'origine était nécessaire pour éviter XSS et d'autres tentatives malveillantes.

Pour lancer une demande d'origine croisée, un navigateur envoie la requête avec un en-tête Origine HTTP. La valeur de cet en-tête est le site qui a servi la page. Par exemple, supposons qu'une page sur http://www.example-social-network.com tente d'accéder aux données d'un utilisateur dans online-personal-calendar.com. Si le navigateur de l'utilisateur met en œuvre CORS, l'en-tête de demande suivant sera envoyé:

Origine: http://www.example-social-network.com

Si online-personal-calendar.com permet la demande, il envoie un en-tête Access-Control-Allow-Origin dans sa réponse. La valeur de l'en-tête indique les sites d'origine autorisés. Par exemple, une réponse à la demande précédente contiendrait les éléments suivants:

Access-Control-Allow-Origin: http://www.example-social-network.com

Si le serveur n'autorise pas la demande d'origine croisée, le navigateur fournira une erreur à la page example-social-network.com au lieu de la réponse en ligne-personal-calendar.com.

Pour permettre l'accès à toutes les pages, un serveur peut envoyer l'en-tête de réponse suivant:

Access-Control-Allow-Origin: *

Cependant, cela pourrait ne pas être approprié pour les situations dans lesquelles la sécurité est une préoccupation.

Très bien expliqué ici dans la page wiki ci-dessous. http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

Une autre solution de contournement consiste à diriger la requête ajax vers une page php (par exemple) sur votre domaine et, dans cette page, faire une requête cURL vers le sous-domaine.

Nouvelle idée: si vous voulez un sous-domaine croisé (www.domain.com et sous.domain.com) et que vous travaillez sur apache. Les choses peuvent être beaucoup plus faciles. Si un sous-domaine est en fait un sous-répertoire dans public_html (sous.domain.com = http://www.domain.com/sub/), alors si vous avez un ajax.domain.com/?request=subject … vous pouvez faire quelque chose comme ceci: www .domain.com / ajax /? Request = subject

Fonctionne comme un charme pour moi, et pas de hacks stupides, des procurations ou des choses difficiles à faire pour quelques demandes Ajax!

La solution la plus simple que j'ai trouvée était de créer un php sur votre sous-domaine et d'inclure votre fichier de fonction d'origine en utilisant un chemin complet.

Exemple:

http://Www.domain.com/ajax/this_is_where_the_php_is_called.php

Sous-domaine:

Sous.domain.com

Créer: sous.domain.com/I_need_the_function.php

À l'intérieur de I_need_the_function.php, utilisez un include:

Include_once ("/ server / path / public_html / ajax / this_is_where_the_php_is_called.php");

Maintenant, appelez sous.domain.com/I_need_the_function.php à partir de votre javascript.

 var sub=""; switch(window.location.hostname) { case "www.domain.com": sub = "/ajax/this_is_where_the_php_is_called.php"; break; case "domain.com": sub = ""; break; default: ///your subdomain (or add more "case" 's) sub = "/I_need_the_function.php"; } xmlHttp.open("GET",sub,true); 

L'exemple est aussi simple que je peux le faire. Vous voudrez peut-être utiliser de meilleurs chemins formatés.

J'espère que ça aidera quelqu'un. Rien de dérangé ici – et vous appelez le fichier d'origine, de sorte que toute modification s'appliquera à toutes les fonctions.

J'ai écrit une solution pour le sous-domaine secondaire et j'ai travaillé pour mes applications. J'ai utilisé iframe et configurant document.domain = "domain.com" des deux côtés. Vous pouvez trouver ma solution à:

https://github.com/emphaticsunshine/Cross-sub-domain-solution