美文网首页
JSONP_跨域

JSONP_跨域

作者: Taaaaaaaurus | 来源:发表于2017-08-17 21:01 被阅读0次

    题目1: 什么是同源策略

    浏览器出于安全方面考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不能读写对方的资源。
    如:

    • http://jirengu.com/a/b/jshttp://jirengu.com/index.php(同源)

    不同源的例子:

    • http://jirengu.com/main.jshttps://jirengu.com/a.php(协议不同)
    • http://jirengu.com/main.jshttp://bbs.jirengu.com/a.php(域名不同,域名必须完全相同)
    • http://jirengu.com/main.jshttp://jirengu.com:8080/a.php(端口不同,第一个是80)
      对于当前页面来说,页面存放的JS文件的域不重要,重要的是加载该JS的页面在什么域。

    题目2: 什么是跨域?跨域有几种实现形式

    简单地理解就是因为JavaScript同源策略的限制,a.com 域名下的js无法操作b.com或是c.a.com域名下的对象。更详细的说明看下表:

    url 说明 是否允许通信
    http://www.a.com/a.jshttp://www.a.com/b.js 同一域名下 允许
    http://www.a.com/lab/a.jshttp://www.a.com/script/b.js 同一域名下不同文件夹 允许
    http://www.a.com:8000/a.jshttp://www.a.com/b.js 同一域名,不同端口 不允许
    http://www.a.com/a.jshttps://www.a.com/b.js 同一域名,不同协议 不允许
    http://www.a.com/a.jshttp://70.32.92.74/b.js 域名和域名对应ip 不允许
    http://www.a.com/a.jshttp://script.a.com/b.js 主域相同,子域不同 不允许
    http://www.a.com/a.jshttp://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
    http://www.cnblogs.com/a.jshttp://www.a.com/b.js 不同域名 不允许

    跨域的实现方式有以下几种:

    1. JSONP
    2. CORS
    3. 降域
    4. postMessage

    题目3: JSONP 的原理是什么

    当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如: <script src="http://www.example.net/api?param1=1&param2=2"></script> 并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。 第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如: callback({"name":"hax","gender":"Male"}) 这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

    题目4: CORS是什么

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

    跨域资源共享 CORS 详解

    题目5: 根据视频里的讲解演示三种以上跨域的解决方式

    JSONP CROS 降域

    当这两个域名都属于同一个基础域名并且所用的协议、端口都一致的时候,可以使用降域来实现跨域
    例:

    //页面A的URL: http://a.jirengu.com/a.html
    window.domain = jirengu.com
    
    //页面B的URL: http://b.jirengu.com/a.html
    window.domain = jirengu.com
    
    postMessage

    相关文章

      网友评论

          本文标题:JSONP_跨域

          本文链接:https://www.haomeiwen.com/subject/oawerxtx.html