出于安全原因,浏览器对页面中的ajax请求(XMLHTTPRequest)有同源策略的限制。
一、协议指:http、https、ftp等属于不同的协议,尤其是http和https也是不同的协议。
二、域名指不同:
- 顶级域名不同。如 www.abc.com的页面中不能向 www.def.com发出http请求。
- IP与域名也被认为是不同的,即便他们是一回事。比如在开发的时候,你自己的本机局域网地址是192.168.1.106,你用 localhost 打开当前页面,而页面中请求的却是192.168.1.106也不行的。总之,域名和IP被认为是不同的域名,包括 localhost ,所以要么全用域名,要么全用IP。
- 相同顶级域名,但二级域名不同也是不同的。这个要求对同一域名下的各个子服务之间访问造成了一些限制。比如 www.example.com 和 download.example.com 就是不同的,www.example.com 和 example.com也是不同的。不过javascript中允许设置document.domain 变量为 当前域名更短的域名,比如当前访问的是www.example.com,可以设置document.domain为example.com,这样就可以访问 example.com 下的请求。一种跨子域的解决方法就是,x子域的当前页面包括一个y子域的iframe,当前页面和这个frame分别将自己的document.domain设置为根域名,这样当前x子域的页面就可以通过这个y子域的页面代理访问y子域的请求。
三、端口不同:这个大家都明白,比如80和8080是不同的。
iframe也可以是任意url,但当前页面只能向自己的同源发出请求。