技术点-Jsonp跨域请求-概念性总结

来源:互联网 发布:中级程序员证书有用吗 编辑:程序博客网 时间:2024/06/13 05:23

什么是jsonp?
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。

jsonp有什么用?
由于同源策略的限制,xmlhttprequest只允许请求当前源的资源,为例实现跨域请求,可以通过script标签实现跨域请求。

何为跨域问题?
由于浏览器的限制,不允许ajax进行跨域通信。

同源策略限制是什么?
受到请求的 URL 的域必须与当前 Web 页面的域相同。这意味着浏览器隔离来自不同源的内容,以防止它们之间的操作。(域名、协议、端口)相同的域的资源。

jsonp的简单表现形式
客户端声明回掉函数,然后通过script标签想服务器跨域请求数据,然后服务器返回响应数据,然后动态执行回掉函数。

实现原理:

核心:就是动态创建<script>标签,然后利用<script>的src 不受同源策略约束来跨域获取数据。

具体流程:
–首先在客户端注册一个callback, 然后把callback的名字传给服务器。此时,服务器先生成 json 数据。
–然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp。
–最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
–客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

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

2,要确定 JSONP 请求是否失败并不容易。

推荐jsonp的概念性解释比较好的牛人博客,不过是PHP后台,注意下:http://justcoding.iteye.com/blog/1366102

注意:
1,jquey是不支持post方式跨域的,为什么?
虽然采用post +动态生成iframe是可以达到post跨域的目的,但这样做是一个比较极端的方式,不建议采用。
也可以说get方式的跨域是合法的,post方式从安全角度上,被认为是不合法的, 万不得已还是不要剑走偏锋。