我对本机Ajax请求调用有一个奇怪的问题。
我正在创建Ajax对象并发送如下请求:
var xmlHttpObj = new XMLHttpRequest();
...
xmlHttpObj.open("GET","http://192.168.16.254:8080/ajax/demoExample.html",true);
xmlHttpObj.send();
当我使用类似http://localhost:8080/ajax...
的URL访问servlet时,
然后我无法在客户端获得响应。但我可以在服务器端看到响应。
我用
调用请求的方式非常类似xmlHttpObj.open("GET","http://localhost:8080/ajax/demoExample.html",true);
我的网址为http://192.168.16.254:8080/ajax...
,然后我也无法在客户端看到响应。
我知道解决问题的最佳方法。
我可以用
调用请求xmlHttpObj.open("GET","../ajax/demoExample.html",true);
xmlHttpObj.send();
然后我对localhost或IP地址没有任何问题。
但我仍然认为为什么ajax请求中localhost和IP地址之间存在差异。
答案 0 :(得分:5)
这更像是一个安全功能而不是一个问题:
same origin policy阻止a 从一个加载的文档或脚本 得到或设置的起源 另一个文档的属性 原点。
localhost和192.168.16.254被认为是不同的起源。对于指向同一地址的两个主机名也是如此,因为它们可能(并且可能会)指向同一服务器上的不同站点/应用程序。 AFAIK解决这个问题的唯一方法是使用iframe
作为内容,或使用JSONP
作为json。虽然在您的情况下,相对URL是可行的方法。