跨域

同源策略

同源策略是对XHR的一个主要约束,它为通信设置了“相同的域”,“相同的端口”,“相同的协议”一系列限制,浏览器从安全角度出发,只允许在本域下的接口交互,不同源的客户端在没有明确授权的情况下,不能读写限制之外的资源,除非采用被认可的跨域方案。而跨域资源嵌入是被允许的,页面中的连接,重定向和表单提交也是被允许的。

跨域方式

  • JSONP
  • CORS(Cross-Origin Resource Sharing,跨域资源共享)
  • 降域
  • postMessage

JSONP的原理

JSONP(JSON with padding)填充式JSON,JSONP主要由回调函数和数据(传入回调函数的JSON数据)组成,因为浏览器允许跨域资源嵌入,所以JSONP是通过在页面内动态地添加

 var backMs = req.query.callback;
    if(backMs){
        res.send(backMs + '(' +JSON.stringify(data) + ')' );
    } else {
        res.send(data);
    }

CORS

CORS 全称是跨域资源共享(Cross-Origin Resource Sharing),是一种 ajax 跨域请求资源的方式,支持现代浏览器,IE支持10以上。 实现方式很简单,当你使用 XMLHttpRequest 发送请求时,浏览器发现该请求不符合同源策略,会给该请求加一个请求头:Origin,后台进行一系列处理,如果确定接受请求则在返回结果中加入一个响应头:Access-Control-Allow-Origin; 浏览器判断该相应头中是否包含 Origin 的值,如果有则浏览器会处理响应,我们就可以拿到响应数据,如果不包含浏览器直接驳回,这时我们无法拿到响应数据。


app.get("/getItems",function(req,res){
    var jobs = [
        "4444444",
        "5555555",
        "6666666",
        "7777777",
        "8888888",
        "9999999"
    ]
    var data = []
    for(var i = 0; i < 3; i++){
        var index = parseInt(Math.random() * jobs.length)
        data.push(jobs[index])
    }
res.header("Access-Control-Allow-Origin","http://huairen.com:8080")    //添加一个响应头
res.send(data)

PostMessage

parent

child


    


降域

a.html


b.html


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