jsonp全方位解析

异步蝉翼
• 阅读 2725

同源策略

  • 浏览器的一种安全策略,所谓同源,指的是域名、协议、端口号完全相同
  • 限制:cookie、localStorage和IndexDB无法读取;无法操作跨域的iframe里的dom元素;Ajax请求不能发送

jsonp原理

  • 本质是利用了标签(link,img,script,这里使用script)具有可跨域的特性,由服务端返回预先定义好的javascript函数的调用,并且将服务端数据以该函数参数的形式传递过来
  • 前端javascript代码
<script>
    function fuc(data){
        console.log(data.name);
    }
</script>
<script src="http://www.baidu.com/api.php?callback=fuc"></script>
  • 后端php代码
<?php
    $cb = $_GET['callback'];
    $data = array(
                'name'=> 'zs',
                'age'=>18,
                'gender'=>true
            );
    echo $cb.'('.json_encode($data).')';
?>

jsonp优点

  • 完美解决在测试或者开发中获取不同域下的数据,用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了

jsonp缺点

  • jsonp只支持get请求而不支持post请求
  • 用session来判断当前用户的登录状态,跨域时会出现问题
  • jsonp存在安全性问题

特别注意

  1. 防止callback参数意外截断js代码,特殊字符单引号双引号,换行符存在风险
  2. 防止callback参数恶意添加script标签,造成xss漏洞
  3. 防止跨域请求滥用,阻止非法站点恶意调用

参考资料

大家好,我是小磊哥er!

点赞
收藏
评论区
推荐文章
室与 室与
4年前
Cors跨域解决
一、浏览器跨域问题产生1、跨源资源共享(CORS)中文文档:https://developer.mozilla.org/zhCN/docs/Web/HTTP/Access_control_CORS2、什么是浏览器跨域问题指的是浏览器不能执行其他网站的脚本。JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象,即同源策略。就好比我
芝士年糕 芝士年糕
2年前
什么是跨域
域: 是指浏览器不能执行其他网站的脚本跨域: 它是由浏览器的 同源策略 造成的,是浏览器对 JavaScript 实施的安全限制,所谓同源(即指在同一个域)就是两个页面具有相同的协议 protocol,主机 host 和端口号 port 则就会造成 
专注IP定位 专注IP定位
3年前
浅析九种跨域方式实现原理
我们在解决一个问题的时候应该先去了解这个问题是如何产生的,为什么会有跨域的存在呢?其实,最终的罪魁祸首都是浏览器的同源策略,浏览器的同源策略限制我们只能在相同的协议、IP地址、端口号相同,如果有任何一个不通,都不能相互的获取数据。并且,http和https之间也存在跨域,因为https一般采用的是443端口,http采用的是80端口或者其他。同源策略是一种约
Stella981 Stella981
3年前
Https请求的页面中无法使用http访问
今天遇到一个问题,使用https访问的页面,其间发起http的ajax的请求都被浏览器拒绝,必须为https,否则无法请求,导致页面局部未初始化。浏览器报错Thisrequesthasbeenblocked;thecontentmustbeservedoverHTTPS.百度了下,了解到同源策略。所谓“同源”指的是:协议相同、域名相
Wesley13 Wesley13
3年前
JavaEE从服务器端解决Ajax跨域问题
1、Ajax跨域简介  1、指的是浏览器不能执行其他网站的脚本。是浏览器施加的安全限制。js本身不跨域,使用form表单和iframe直接请求,是不会跨域的;  2、只要两个url的协议、域名、端口其中有一个不同,从其中一个url中使用ajax请求另一个url,则属于Ajax跨域;  3、ajax请求接口,只是不能进入回调函数,接口还是可以正常请
Stella981 Stella981
3年前
SpringBoot实现jsonp跨域通信
实现jsonp跨域通信实现基于jsonp的跨域通信方案原理浏览器对非同源ajax请求有限制,不允许发送跨域请求目前跨域解决方案有两种cros配置jsonp请求cros为新规范,通过一个head请求询问服务器是否允许跨域,若不允许则被拦截jso
Stella981 Stella981
3年前
Js中的跨域问题
一、什么是跨域?1.定义:跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com页面去请求www.google.com的资源。但是一般情况下不能这么做,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。跨域的严格一点的定义是:只要协议,域名,端口有任何一
Easter79 Easter79
3年前
SpringBoot实现jsonp跨域通信
实现jsonp跨域通信实现基于jsonp的跨域通信方案原理浏览器对非同源ajax请求有限制,不允许发送跨域请求目前跨域解决方案有两种cros配置jsonp请求cros为新规范,通过一个head请求询问服务器是否允许跨域,若不允许则被拦截jso
Stella981 Stella981
3年前
35道面向初中级前端的基础面试题
如需获取完整版229页PDF面试题,请直接滑到文末。1\.什么是同源策略?同源策略可防止JavaScript发起跨域请求。源被定义为协议、主机名和端口号的组合。此策略可防止页面上的恶意脚本通过该页面的文档对象模型,访问另一个网页上的敏感数据。参考资料:浏览器的同源策略(https://www.oschina.
liam liam
1年前
解决 Axios 跨域阻碍,提高前端接口访问效率
跨域是指访问另外一个域的资源,由于浏览器的同源策略,默认情况下使用XMLHttpRequest和Fetch请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略,这是由浏览器对施加的安全限制。Axios跨域常见报错跨域请求被阻止(CrossOriginRe
ZOS对象存储跨域资源访问的实现和使用
跨域指的是从一个域名去请求另外一个域名的资源,即跨域名请求。跨域时,浏览器不能执行其他域名网站的脚本,这是由浏览器的同源策略造成的,是浏览器施加的安全限制。同源策略是一种约定,是浏览器最核心也最基本的安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,这是一个用于隔离潜在恶意文件的重要安全机制。