浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 。域名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);