首先在讲Jsonp跨域之前,要先来介绍一下什么是跨域。
跨域就是:
当协议,ip/域名,端口有任何不同,都被当成跨域。跨域发生的时机是请求,响应回来之后。浏览器主动监测是否跨域。跨域的本质是请求成功了,响应也成功了。但是由服务端响应回来的数据被浏览器拦截。检测出跨域,抛异常。因此跨域并不影响一次成功的请求。在跨域之前请求已经执行完毕了。
解决跨域的方式有两种,一种是客户端解决跨域,一种是服务端解决跨域。
客户端解决跨域是Jsonp
Jsonp是一种跨域解决方案。
Jsonp跨域其实是利用了src的属性特点。
img,script都有src属性。利用标签中的src属性,不受到跨域限制的特点。可以拿到外部资源。
img虽然可以跨域。但是它只是拿资源回来。并没有进一步做任何js的动作。
只有script标签,会把云上面的资源拿回来。并且把云上面的资源内容作为js代码运行。
也就是说能被我们利用的漏洞就只有script一个。
接下来说一下Jsonp核心点:
就是利用script标签,可以跨域请求云端的资源。并且把云端的资源请求到本地。把资源作为脚本来运行
用jsonp做一个登录测试:
就是前端script的src发起跨域请求。拼接参数,账号以及密码。然后向后端发起请求。后端接收响应之后,返回的时候。返回给我们一个方法名(形参,想要传的参数放里面)。这时候我们在前端写好一个方法名(接收后端传过来的东西)。当后端的数据返回的时候。我们会发现前端接收的其实是一个函数方法。而前端的script里面存在这个方法。所以返回函数。就相当于执行了script里面的那个方法。
succes(user)