2010-11-15 27 views
2

J'ai un problème étrange avec l'appel de requête Ajax natif.Différence entre l'hôte local et l'adresse IP dans l'envoi de la requête Ajax

Je crée l'objet Ajax et l'envoi de la demande comme suit:

var xmlHttpObj = new XMLHttpRequest(); 

....

xmlHttpObj.open("GET","http://192.168.16.254:8080/ajax/demoExample.html",true); 
xmlHttpObj.send(); 

Lorsque j'accéder au servlet avec quelque chose d'URL comme http://localhost:8080/ajax..., je Je ne suis pas en mesure d'obtenir la réponse du côté client. Mais je peux voir la réponse du côté serveur.

façon assez similaire, j'invoqué la demande avec

xmlHttpObj.open("GET","http://localhost:8080/ajax/demoExample.html",true); 

et mon URL est http://192.168.16.254:8080/ajax..., puis aussi je ne suis pas en mesure de voir la réponse de mon côté client.

Je connais la meilleure façon de résoudre le problème.

je peux invoquer la demande avec

xmlHttpObj.open("GET","../ajax/demoExample.html",true); 
xmlHttpObj.send(); 

alors je n'ai pas de problème ni avec l'adresse IP ou localhost.

Mais encore je pense pourquoi est la différence entre localhost et adresse IP dans une requête ajax.

Répondre

5

Il est plus d'une caractéristique de sécurité qu'un problème:

Le same origin policy empêche un document ou d'un script chargé à partir d'une origine d'obtenir ou définir propriétés d'un document à partir d'une autre origine .

localhost et 192.168.16.2434 sont considérés comme des origines différentes. Il en va de même pour deux noms d'hôte qui pointent vers la même adresse car ils pourraient (et vont probablement) pointer vers un autre site/application sur le même serveur. AFAIK le seul moyen de contourner cela est d'utiliser iframe pour le contenu ou JSONP pour json. Bien que dans votre cas, les URL relatives sont la voie à suivre.