跨域解决方案之JSONP

大家好,我是IT修真院上海分院第01期学员,一枚正直善良的web程序员。

今天给大家分享一下,修真院官网 CSS任务中可能会使用到的知识点:

浏览器如何渲染页面

一、背景介绍

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

二、知识剖析

常见的跨域方法有:

jsonp,利用了src属性可以跨域的特性

document.domain跨子域

Access Control,服务器端发送Access-Control-Allow-Origin响应头,规定请求的域名的访问权限

nginx反向代理,客户端nginx拦截代码中虚假的http请求,替换成正确的http


三、常见问题

四、解决方案


五、编码实战

六、扩展思考

JSONP跨域有什么优缺点?

优点:兼容性很好好,可以在古老的浏览器中运行,

缺点:它只支持GET请求而不支持POST等其它类型的HTTP请求。

jsonp和ajax有什么关系?

ajax是通过操作XMLHttpRequest对象发送请求,获取返回的数据。JSONP的全称为JSON with Padding,Padding 指的就是包裹在JSON 外层的回调函数。从刚才的例子中,咱们发现JSONP并没有操作XMLHttpRequest,因此jsonp和ajax没有任何关系。

如何用 JQUERY 实现 JSONP


七、更多讨论

问:详细讲一下什么是跨域?

答:

问:jsonp还有更多的缺点么

答:JSONP目前还是比较流行的跨域方式,虽然JSONP使用起来方便,但是也存在一些问题: 

首先, JSONP 是从其他域中加载代码执行。如果其他域不安全,很可能会在响应中夹带一些恶意代码,而此时除了完全放弃 JSONP 调用之外,没有办法追究。因此在使用不是你自己运维的 Web 服务时,一定得保证它安全可靠。

其次,要确定 JSONP 请求是否失败并不容易。虽然 HTML5 给元素新增了一个 onerror事件处理程序,但目前还没有得到任何浏览器支持。为此,开发人员不得不使用计时器检测指定时间内是否接收到了响应。

问:JSON和JSONP有什么区别?

答:JSON是一种轻量级的数据交换格式,像xml一样,是用来描述数据间的。JSONP是一种使用JSON数据的方式,返回的不是JSON对象,是包含JSON对象的javaScript脚本。


八、参考文献

参考一:跨域资源共享 CORS 详解

参考二:5 分钟彻底明白 JSONP

参考三:深入浅出JSONP--解决ajax跨域问题

九、视频资料



undefined_腾讯视频

感谢大家观看

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

你可能感兴趣的:(跨域解决方案之JSONP)