同源策略、跨域请求及简单使用

问答

  • 什么是同源策略
    • 同源是指域名、协议、端口号完全一样
    • 同源策略:是浏览器的资源访问的一种限制,即不同源的一方资源在没有明确授权的情况下,不能读写另一方的资源。

什么是跨域?跨域有几种实现形式

跨域测试可在本地使用node与server-mock工具,mock简介及使用方法

  • 使用mock方式,修改本地服务器模拟不同域,模拟不同请求的解决办法:
  • 降域,http://hello.a.com通过iframe加载另一个a.com的资源,输出a.com下的函数![0_1467540100501_upload-66eaf5db-3e0d-436d-ad0a-b584247a8e14](http://7xpvnv.com2.z0.glb.qiniucdn.com/87d1104b-3579-4c0a-b2b0-864252fe6425)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //hello.a.com  
    window.document.domain = "a.com";
    setTimeout(function () {
    var iframe = window.frames[0];
    console.log(iframe);
    iframe.window.cross();
    },2000);

    //a.com
    window.document.domain = 'a.com';
    window.cross = function () {
    console.log('我是a.com');
    }
    `
  • 使用jsonp方式:
    a.com访问b.com并将数据打印输出
    0_1467541244453_upload-e28fcd65-207b-41aa-8ec2-f9fb9de8d5a6

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //a.com代码
    window.abc = function (data){
    console.log(data);
    }
    var script = document.createElement('script');
    script.src = '//b.com:8080/data?callback=abc';
    document.body.appendChild(script);


    //b.com下router数据返回
    app.get('/data',function (req, res) {
    var a=req.query.callback+'('+ "{a:'b.com下'}" +')';
    res.send(a);
    }
  • cors方式:

    • 使用jQuery的get方法,未设cors时出现的提示,无法访问
      0_1467543257407_upload-dadead9c-4e53-42e2-b458-d37b97fc2578
      -通过cors访问
      0_1467543329018_upload-670500b1-ec10-40e9-a761-bd5805d87fd5
      1
      2
      3
      4
      5
      6
      7
      8
      //a.com请求
      $.get('//b.com:8080/data',function(ret){
      console.log(ret);
      });
      //b.com的route设置cors
      res.set('Access-Control-Allow-Origin','http://a.com:8080');//设置响应头
      var data = 'cors请求';
      res.send(data);
文章目录
  1. 1. 问答
  2. 2. 什么是跨域?跨域有几种实现形式
    1. 2.1. 实现方式
  3. 3. jsonp 的原理是什么
  4. 4. CORS是什么
  • 练习
  • ,