浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。域名IP 访问 域名 也属于跨域。
跨域解决方法:
jsonp :网页通过添加一个<script>元素,向服务器请求JSON数据,这种做法不受同源政策限制;服务器收到请求后,将数据放在回调函数里传回来。
1 js jsonp
function callback(result) {
//do sth
}
}
var JsonP=document.createElement("script");
JsonP.type="text/javascript";
JsonP.src="url?callback=callback";
document.getElementsByTagName("head")[0].appendChild(JsonP);
2 ajax jsonp
$.ajax({
url:url,
type:"get",
dataType:"jsonp",
jsonpCallback:"callback",
success:function(data){
},
error:function(){
},
})
服务器需要获得callback函数病返回函数和数据,只能使用get方式。
3 Jquery jsonp
(1)
$.getJSON("url?jsoncallback=?",function(data) {
});
//或
$.get('url?callback=?',data, function (json) { }, 'jsonp');
(2)
$.jsonp({
url:url,
callbackParameter: "callback",
callback:"callback",
success:function(data){},
error:function(){},
})
通过修改document.domain来跨子域(一级域名一致才可以)
使用window.name来进行跨域(请求的数据比较固定,iframe)
通过服务器设置Access-Control-Allow-Origin(有些浏览器是不支持的)
header('content-type:application:json;charset=utf8');
header('Access-Control-Allow-Origin:*');
header('Access-Control-Allow-Methods:POST');
header('Access-Control-Allow-Headers:x-requested-with,content-type');
nginx反性代理 :反向代理(Reverse Proxy)方式是指以代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器;并将从服务器上得到的结果返回给Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
postMessage实现跨域
window1.postMessage(msg,targetOrigin)
window2.addEventListener("message", handleMessage, false);
浙公网安备 33010602011771号