55 votes

Une question sur la demande ajax interdomaine (sous-domaine)

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

Cela fonctionne sur tous les navigateurs populaires?

Edit:

La solution évidente est de mettre un proxy en face de www.example.com et n1.example.com et le configurer de sorte que chaque demande d'aller à un sous-ressource de http://www.example.com/n1 obtient mandaté pour http://n1.example.com/.

140voto

shazmoh Points 1312

Le cross domain est un sujet totalement différent. Mais le sous-domaine croisé est relativement facile. Tout ce que vous avez à faire est de définir le document.domain pour qu'il soit identique dans la page parent et dans la page iframe.

 document.domain = "yourdomain.com"
 

Plus d'infos ici

22voto

Melwyn Furtado Points 100

Tous les navigateurs modernes soutien de la SCRO et maintenant, nous devons tirer parti de cet ajout.

Il fonctionne sur une simple poignée de main technique ont été les 2 domaines de la communication confiance les uns les autres par des en-têtes HTTP envoyés/reçus. Cela a été longtemps attendu que la même règle d'origine est nécessaire pour éviter les attaques de type XSS et d'autres malveillant tente.

Pour lancer une de la croix-origine de la demande, le navigateur envoie la demande à l'Origine de l'entête HTTP. La valeur de cet en-tête est le site qui a servi en de la page. Par exemple, supposons qu'une page sur http://www.example-social-network.com les tentatives d'accès de données d'un utilisateur dans online-personal-calendar.com. Si le navigateur de l'utilisateur met en œuvre la SCRO, les suivantes en-tête de demande sera envoyé:

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

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

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

Si le serveur n'autorise pas la croix-origine de la demande, le navigateur va livrer une erreur example-social-network.com page au lieu de la online-personal-calendar.com réponse.

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

Access-Control-Allow-Origin: *

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

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

19voto

Josh Rickard Points 991

Une autre solution qui peut ne pas fonctionner pour vous consiste à insérer / supprimer dynamiquement des balises de script dans votre DOM qui pointent vers 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 demande AJAX, insérez dynamiquement quelque chose comme ceci:

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

1voto

Strae Points 6032

Une autre solution consiste à diriger la demande ajax vers une page php (par exemple) de votre domaine et à y envoyer une demande cURL au sous-domaine.

1voto

Henze Points 11

Nouvelle idée: si vous voulez traverser plusieurs sous-domaines (www.domain.com et sub.domain.com) et que vous travaillez sur apache. les choses peuvent devenir beaucoup plus faciles. si un sous-domaine est en réalité un sous-répertoire de public_html (sub.domain.com = www.domain.com/sub/. Ainsi, si vous avez ajax.domain.com/?request=subject...vous pouvez faire quelque chose comme ceci: www. .domain.com / ajax /? request = sujet

fonctionne comme un charme pour moi, et pas de bidouilles stupides, de mandataires ou de choses difficiles à faire pour quelques requêtes Ajax!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X