首先,在学习JSONP前,先了解什么是JSON:
JSON(JavaScript Object Notation):是一种轻量级的数据交互格式,采用完全独立于编程语言的文本格式来存储和表示数据。JSON易于阅读和编写,同时也易于机器解析和生成(一般用于和提升网络传输效率)
什么是JSONP?
JSONP(JSON with Padding)是一种民间提出的跨域解决方案,通过客户端的scrip标签发出的请求方式。(script标签:主要用于从服务器端加载一段JavaScript脚本并在当前页面中执行)
JSONP的原理:通过添加一个<script>标签,向服务器请求JSON数据,这样就不受同源策略的限制。(同源策略:所谓同源,就是协议、域名、端口都要一致,任意一个不同就算跨域。它是一种约定,是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能都会受到影响)
因为JSON的纯字符数据格式可以简洁的描述复杂数据,且JSON还被JS原生支持,所以在客户端几乎可以随心所欲的处理这种格式的数据;JOSNP协议的一个要点就是允许用户传递一个callbank(回调函数)参数给服务端,然后服务端返回数据时会将这个callbank参数作为函数名包裹在JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
JSONP的优缺点:
优点:
兼容性比较好,可以用于解决浏览器的跨域数据访问的问题;不受同源策略的限制,在请求完毕后可以通过调用callbank的方式回传结果。
缺点:
仅支持GET请求;具有局限性,不安全,可能会受到XSS攻击;只支持跨域HTTP请求这种情况,不能解决不同域的两个页面之间进行JavaScript调用的问题。