常用跨域请求详解

跨域背景介绍:
所有支持Javascript的浏览器都会使用同源策略这个安全策略。导致我们无法直接访问非同源的链接,无法取得非同源的数据,但在项目中我们的数据经常写在另一个源中,于是我们需要突破同源限制,取得其他源的数据,这就叫跨域。

一、JSONP跨域方法

操作方式:在 <script> 标签中请求js文件中后缀带一个callback=showData的参数,showData是在本地调用的函数名称,用来接收数据然后处理。后端通过callback发送数据过来。
原理:<script>中的src地址可以跨域请求js资源,所以只能把传输过来的数据通过js来处理接受。这样就可以正确接收数据了
只能处理GET类型的http请求,不能处理其他的,但是他的兼容性更强,支持所有支持js 的浏览器

二、CORS跨域方法

CORS最大的作用就是能调取非自己域名下的资源
以下理解CORS的简单请求:
简单来说,就是服务器端和web网页端对码,浏览器看到如果能对上码就表示允许跨域请求。
对于简单请求来说,浏览器直接发送CORS请求:在头信息中添加一个Origin字段,说明自己的请求来自那个协议+域名+端口。
服务器端根据请求域名端口判断是否同意这次请求
两种情况,如果服务器端发现无法符合这次请求,那么服务器会返回一个正常的HTTP回应。浏览器发现返回的字段中没有Access-Control-Allow-Origin字段,会抛出错误
第二种情况,如果本次请求在服务器端允许范围内,那么会返回Access-Control-Allow-Origin:允许的域名。浏览器会检测到服务端返回的响应头中有该字段,就会加载跨域请求的资源。
总结来说,浏览器阻止随意的跨域请求是为了安全。而CORS请求要求双方都做处理,相当于双方握手,服务器端请求返回对应的代码,保证了安全。

三、postMessage跨域方法
postMessage 是 HTML5 中新增方法,可实现跨域通信;
postMessage 并不是向服务器读写资源,只是向外发送消息而已;接收端可以用messag选择是否监听
postMessage 是 window 的一个方法,所以只能向windows窗口发送消息;
代码演示

        var input = document.querySelector('.main input');
        input.addEventListener('input', function () {
            console.log('window:' + this.value);
            window.frames[0].postMessage(this.value, '*');
        });

        window.addEventListener('message', function (e) {
            console.log('window:'+ e.data);
            input.value = e.data;
        })

    var input = document.querySelector('input');
    input.addEventListener('input', function () {
        console.log('iframe:'+ this.value);
        window.parent.postMessage(this.value, 'http://a.com:8080');
    });

    window.addEventListener('message', function (e) {
        console.log('ifream:'+ e+.data);
        input.value = e.data;
    })

总结:JSONP和CORS还是目前最主流的方法,一个兼容性强可以做一些小的应用,CORS功能性强,适用范围广。使用的时候可以选择性使用

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    Yaoxue9阅读 1,336评论 0 6
  • 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实...
    他方l阅读 1,086评论 0 2
  • 前沿: 最近总听到同事聊跨域得问题,于是自己抽空仔细的查阅了一下关于跨域的知识。说到跨域,就得提到同源,跨域是指一...
    戈弋图阅读 1,845评论 0 4
  • 1. 什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScri...
    cbw100阅读 6,414评论 2 86
  • CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。 ...
    奇特思维家阅读 1,140评论 0 3