美文网首页
jsonp工作原理

jsonp工作原理

作者: 大嵩的格洛米 | 来源:发表于2021-04-30 14:11 被阅读0次

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.问题背景 由于浏览器的同源策略(同一协议,域名,端口,当其中一个不满足的时候,就会发生跨域)的限制,非同源请求...

  • JSON和JSONP

    什么JSON JSON的优点 JSON的格式 什么是JSONP JSONP的工作原理 1. 2. 4 总结

  • jsonp原理

    模拟jsonp原理 servlet 测试 http://localhost/jq/jsonp.jsp JSONP ...

  • JSONP 的工作原理

    JSONP 的工作原理 1. JSONP由来 根据浏览器同源策略,所谓同源就是协议、主机、端口号都相同时成为同源。...

  • jsonp的原理

    jsonp的原理

  • 跨域的几种解决方案

    方法一:JSONP 原理 JSONP(JSON with padding),padding有填补的意思,所以JSO...

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • 前端常见面试题(十七)@郝晨光

    解释jsonp的原理 jsonp的原理就是利用script标签不受同源策略限制的特性,通过与后端协作,动态的创建s...

  • 解释 jsonp 的原理,以及为什么不是真正的 ajax?

    JSONP原理: jsonp,即json+padding,动态创建script标签,利用script标签的src属...

  • 遇到的面试题

    null instanceOf Object false jsonp跨域原理,优缺点,安全性因素 jsonp的实现...

网友评论

      本文标题:jsonp工作原理

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