我对本机Ajax请求调用有一个奇怪的问题。
我正在创建Ajax对象并发送请求,如下所示:
var xmlHttpObj = new XMLHttpRequest();
....
xmlHttpObj.open("GET","http://192.168.16.254:8080/ajax/demoExample.html",true); xmlHttpObj.send();
当我使用类似的URL访问servlet时http://localhost:8080/ajax...,则无法在客户端得到响应。但是我可以在服务器端看到响应。
http://localhost:8080/ajax...
与我调用请求的方式非常相似
xmlHttpObj.open("GET","http://localhost:8080/ajax/demoExample.html",true);
我的网址是http://192.168.16.254:8080/ajax...,那么我也无法在客户端看到响应。
http://192.168.16.254:8080/ajax...
我知道解决问题的最佳方法。
我可以用
xmlHttpObj.open("GET","../ajax/demoExample.html",true); xmlHttpObj.send();
那么我的本地主机或IP地址都没有问题。
但是我仍然认为为什么ajax请求中的本地主机和IP地址之间有区别。
它更多的是安全性而不是问题:
该同源策略阻止从一个原点加载从获取或设置从另一个起源上的文档属性的文档或脚本。
本地主机和192.168.16.254被认为是不同的来源。指向相同地址的两个主机名也是如此(它们可能(可能会)指向同一服务器上的不同站点/应用程序)。AFAIK解决此问题的唯一方法是iframe用于内容或JSONPjson。尽管在您的情况下,相对URL是可行的方法。
iframe
JSONP