jsonp工作原理

1.问题背景

由于浏览器的同源策略(同一协议,域名,端口,当其中一个不满足的时候,就会发生跨域)的限制,非同源请求,都会产生跨域的问题,jsonp的出现就是为了解决这个问题。

2.突破同源策略

浏览器的同源策略,把跨域请求都禁止了,但是 页面中 带 src 的标签是个例外,比如sript,img,iframe,a这些标签的外链是不受同源策略的限制的
jsonp就是利用上面scrpt 标签的特性来进行跨域数据访问的

3.jsonp的实现机制

1.与服务端约定好一个回调的函数名,在客户端定义好这个函数,在请求url中添加 callback = 函数名的查询字符
2.服务端接收到请求之后,将函数名和需要返回的数据拼接成“函数名(data)”函数执行的方式返回
3.页面接收到数据后,解析完直接执行这个回调函数,这时数据就成功传输到了客户端

客户端代码
    var flightHandler = function (data) {
        alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。');
    };

    var url = "http://localhost:8080/jsonp?callback=flightHandler";
    var script = document.createElement('script');
    script.setAttribute('src', url);
    document.getElementsByTagName('head')[0].appendChild(script);
服务端代码
app.use(async (ctx, next) => {
    if (ctx.path == '/jsonp' && ctx.querystring) {
        //querystring处理
        let queryArr = ctx.querystring.split("&");
        let queryObj = {};
        queryArr.forEach((item) => {
            let tmp = item.split("="); 
            queryObj[tmp[0]] = tmp[1];
        })
        const callback = queryObj['callback'];
        const obj = {
            price: '18',
            tickets: 33
        }
        const args = JSON.stringify(obj);
        ctx.body = `${callback}(${args})`;
    }
    await next();
})

总结

所以,jsonp就是利用<script>标签没有跨域限制的“漏洞”,来达到第三方通讯的目的。
当需要通讯时,本站脚本创建一个<script>标签,src指向第三方,的api网址,<script src=“http://www.test.com/params1=1&params2=2”></script>病提供一个回调函数来接收数据
第三方产生的响应为json数据的包装,故称为jsonp,like callback({“name”:“gromy”})
这样浏览器会调用callback函数,并传递解析后json对象作为参数,完成一次交互数据

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

推荐阅读更多精彩内容

  • JSONP 的工作原理 1. JSONP由来 根据浏览器同源策略,所谓同源就是协议、主机、端口号都相同时成为同源。...
    bo_bo_bo_la阅读 2,675评论 0 1
  • 很简单,就是利用 标签没有跨域限制的“漏洞”(历史遗迹啊)来达到与第三方通讯的目的。当需要通讯时,本站脚本创建一个...
    光剑书架上的书阅读 3,385评论 0 1
  • Ajax工作原理是 相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化。 对于用...
    不去解释阅读 4,716评论 0 4
  • 一、什么是jsonp 1)浏览器的同源策略:浏览器出于安全考虑具有跨域的安全限制,即限制从一个源加载的文档或脚本与...
    puxiaotaoc阅读 3,798评论 0 0
  • 1 JSONP的原理与实现 1.1 同源策略 前端跨域是每个前端人绕不过的坎,也是必须了解的一个知识点。我记得第一...
    NS西北风阅读 8,535评论 0 6