sitenhan

  博客园  :: 首页  ::  :: 联系 :: 订阅 订阅  :: 管理

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

 

posted on 2018-06-28 12:04  sitenhan  阅读(114)  评论(0编辑  收藏  举报