三种以上跨域的解决方式

第一种JSONP

在html下引入外界地址的script标签是可行的,可以引入jquer库等,那说明说同源策略并没有对script的src进行监测,所以可以通过script的src引入外界的地址,通过script 去后台访问数据,将访问的数据,通过后台的配合,将后台返回的数据当做js去运行。

代码例子:

 

  
       
      
      news



  • 第11日前瞻:中国冲击4金 博尔特再战
  • 男双力争会师决赛
  • 女排将死磕巴西!

后台代码

  将后台返回的数据,作为参数传给函数appendHtml,然后调用函数appendHtml执行。从而获得了后台返回的数据,实现了跨域。

app.get('/getNews', function(req, res){

var news = [
    "第11日前瞻:中国冲击4金 博尔特再战200米羽球",
    "正直播柴飚/洪炜出战 男双力争会师决赛",
    "女排将死磕巴西!郎平安排男陪练模仿对方核心",
    "没有中国选手和巨星的110米栏 我们还看吗?",
    "中英上演奥运金牌大战",
    "博彩赔率挺中国夺回第二纽约时报:中国因对手服禁药而丢失的奖牌最多",
    "最“出柜”奥运?同性之爱闪耀里约",
    "下跪拜谢与洪荒之力一样 都是真情流露"
]
var data = [];
for(var i=0; i<3; i++){
    var index = parseInt(Math.random()*news.length);
    data.push(news[index]);
    news.splice(index, 1);
}
var cb = req.query.callback;
//判断是否有callback如果有,返回appendHtml(JSON.stringify(data))这样html就能以执行js方式调用函数 appendHtml
if(cb){
    res.send(cb + '('+ JSON.stringify(data) + ')');
}else{
    res.send(data);
}
})

第二种CORS

CORS全称Cross-Origin Resource Sharing,定义了在必须访问跨域资源时,浏览器与服务器要如何沟通。原理是使用自定义的的HTTP头部让浏览器与服务器沟通,从而决定请求或相应是否成功。比如在发送一个简单的get请求时,需要给它附加一个额外的origin头部,其中包含请求页面的源信息,以便让服务器根据这个头部信息决定是否给予响应。

    只需要后台做配置,设置可以允许的 origin

// res.header("Access-Control-Allow-Origin", "http://a.jrg.com:8080");
这样a.jrg.com:8080的网站前来访问就可以接受,并给返回数据。
允许网页地址是http://a.jrg.com:8080来访问接口要数据
res.header("Access-Control-Allow-Origin", "*");
// 允许任何网站前来要数据。
代码例子 :

      
     
      
          
          
          news
          


      
  • 第11日前瞻:中国冲击4金 博尔特再战
  • 男双力争会师决赛
  • 女排将死磕巴西!
app.get('/getNews', function(req, res){ var news = [ "第11日前瞻:中国冲击4金 博尔特再战200米羽球", "正直播柴飚/洪炜出战 男双力争会师决赛", "女排将死磕巴西!郎平安排男陪练模仿对方核心", "没有中国选手和巨星的110米栏 我们还看吗?", "中英上演奥运金牌大战", "博彩赔率挺中国夺回第二纽约时报:中国因对手服禁药而丢失的奖牌最多", "最“出柜”奥运?同性之爱闪耀里约", "下跪拜谢与洪荒之力一样 都是真情流露" ] var data = []; for(var i=0; i<3; i++){ var index = parseInt(Math.random()*news.length); data.push(news[index]); news.splice(index, 1); } // res.header("Access-Control-Allow-Origin", "http://a.jrg.com:8080"); res.header("Access-Control-Allow-Origin", "*"); console.log("111111"); res.send(data); })

第三种降域

 a.html
              
                         
            
                     
                    Document
    
    
    

    

使用降域实现跨域

b.html Document

document.domain = "jrg.com" 通过这行代码,将两个网站的都降级为jrg.com 所以属于同源了,可以相互访问数据。

第四种postMessage() 是用主动发送 和主动接收的方式


  


使用postMessage实现跨域

你可能感兴趣的:(三种以上跨域的解决方式)