跨域

一、 什么是同源策略
同源策略是由Netscape提出的安全策略,所有支持JavaScript的浏览器都会使用这个策略。即浏览器出于安全方面的考虑,只允许与本域名下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。所谓同源是指 协议、域名、端口相同。
二、 什么是跨域?跨域有几种实现形式
跨域是指从一个域名的网页去请求另一个域名的资源。比如从http://google.com 面去访问 http://jirengu.com 的资源,跨域严格来说只要协议,端口,域名有任何一个不同的,就是跨域。
跨域访问有四种实现形式:
1、JSONP 由于script标签不受同源策略限制,可动态创建script,先创建一个script标签,可以加载任何内容,把请求页面当成js文件解析,之后再删除。
2、CORS (Cross-Origin Resource Sharing)是一种ajax跨域请求资源的方式,进行跨域请求时,请求头加一个origin,后台响应头加Access-Control-Allow-Origin
3、使用降域实现跨域(在拥有的相同的父域名时才可实现),现有的域名写成相同的父域名,请求访问的域名写成相同的父域名。
4、postMessage window下的一个跨域方法
三、 JSONP 的原理是什么
由于浏览器的同源策略时,不能向不同的域提交请求。JSONP(JSON with Padding)实现跨域原理是:
首先在注册一个callback, 然后把callback的名字传给后台。此时,服务器先生成 json 数据。 然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里。
由于使用script标签的src属性,因此只支持get方法
一个简单的jsonp实现,其实就是拼接url,然后将动态添加一个script元素到头部
四、CORS是什么
CORS跨域资源共享(Cross-origin resource sharing),它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。需要浏览器和服务器同时支持。整个过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
即使用XMLHttpRequest跨域请求时,浏览器会再请求头中添加:Origin,后端如果认为可以接受请求会在Access-Control-Allow-Origin 相应添加一个包含Origin的值。
五、 根据视频里的讲解演示三种以上跨域的解决方式
(一)用jsonp实现降域




  
  
  


  
  1. 侯佩岑怀二胎孕照
  2. 上海现史诗级骂街
  3. 侯佩岑怀二胎孕照

router.js




  
  
  


  
  1. 侯佩岑怀二胎孕照
  2. 上海现史诗级骂街
  3. 侯佩岑怀二胎孕照

实现效果

跨域_第1张图片
jsonp.jpg

跨域_第2张图片
jsonp.jpg

(二)cors实现降域




  
  
  


  
  1. 侯佩岑怀二胎孕照
  2. 上海现史诗级骂街

router.js


app.get('/getNews', function(req, res) {
 var news=[
  "上海现史诗级骂街",
  "小学课文又现造假",
  "巴拉巴拉小魔仙",
  "网红渔网袜",
  "潮流喇叭裤"
  ]
    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://b.jrg.com:8080");
    res.send(data);
})

实现效果

跨域_第3张图片
1.jpg

(三)利用降域实现跨域
jiangyua.html




    降域实现跨域
    
    


使用降域实现跨域

jiangyub.html




    降域实现跨域
    
    






实现效果

跨域_第4张图片
1.jpg

(四)利用postMessage实现跨域
postMessage-a.html




    降域实现跨域
    
    


 

使用降域实现跨域

postMessage-b.html




    降域实现跨域
    
    






实现效果

跨域_第5张图片
1.jpg

跨域_第6张图片
2.jpg

你可能感兴趣的:(跨域)