跨域
当两个域名地址的协议、子域名、主域名、端口号中任意一个不相同时,都算作不同域。不同域间相互请求资源,即为“跨域”。
禁止跨域
出于安全方面的考虑,Javascript使用同源策略,不允许跨域调用其它页面的对象。
解决办法
1. 代理
在同域名的web服务器端创建一个代理。
在A地的web服务器的后台调用B地服务器的服务,然后再把响应结果返回给前端,这样前端调用A地同域名的服务就和调用B地的服务效果相同了。
2. JSONP
JSONP可用于解决主流浏览器的跨域GET请求。
原理:
在www.aaa.com中:
<script>
function jsonp(json) {
//do something
alert(json["name"]);
}
</script>
<script src="http://www.bbb.com/jsonp.js"></script>
在www.bbb.com页面中:
jsonp({"name":"哪吒","age":7});
<script>
标签可以跨域获取文件。
该方法不支持POST请求。
3. XHR2
HTML5提供的XMLHttpRequest Level2已经实现了跨域访问以及其他的一些新功能。
不支持IE10以下版本
方法:
在服务器端做一些改造:
header('Access-Control-Allow-Origin:*');
//符号*表示所有域都可以访问,也可以设为特定域名,即仅允许设定的域名访问。
header('Access-Control-Allow-Methods:POST,GET');
(完)