美文网首页
JSONP,跨域

JSONP,跨域

作者: 饥人谷_有点热 | 来源:发表于2017-06-13 22:47 被阅读0次

    1.什么是同源策略

    同domain(或ip),同端口,同协议视为同一个域,一个域内的脚本仅仅具有本域内的权限,可以理解为本域脚本只能读写本域内的资源,而无法访问其它域的资源。这种安全限制称为同源策略。

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

    概念:只要协议、域名、端口有任何一个不同,都被当作是不同的域。

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

    跨域实现形式:

    • 通过jsonp跨域
    • 通过修改document.domain来跨子域
    • 使用window.name来进行跨域
    • 使用HTML5的window.postMessage方法跨域

    3.JSONP 的原理是什么

    XMLHttpRequest不能跨域,但是<script>标签的src可以跨域,所以jsonp正是利用这个特性来实现的.当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递),第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:callback({"name":"hax","gender":"Male"})。这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。

    <script type="text/javascript">
        function dosomething(jsondata){
            //处理获得的json数据
        }
    </script>
    <script src="http://example.com/data.php?callback=dosomething"></script>
    

    js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。所以jsonp是需要服务器端的页面进行相应的配合的。

    4. CORS是什么

    CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
    因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

    相关文章

      网友评论

          本文标题:JSONP,跨域

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