ajax跨域请求之解决方法jsonp

要想搞明白什么是jsonp,首先要知道下面几个问题

1:产生跨域请求的原因

我们都知道产生跨域的原因是因为浏览的同源策略,而所谓的同源策略是指非同源的两个网页之间不可以相互访问。这是为了保证用户信息的安全,阻止恶意盗取数据。最好理解的就是cookie,比如你在淘宝上登录了用户名密码,一般都是用cookie存储的,如果你不退出登录,那其他网站就可以盗窃相关信息。产生很大的风险。

2:什么情况是跨域

同源是指协议,域名,端口号都相同的情况,否则其中有一个不一样,则会产生跨域问题

http://www.yyyweb.com/377.html

这里http是协议,www.yyyweb.com是域名,没显示端口就代表默认端口号是80

3:jsopn原理

终于说到正题了,ajax的跨域请求是经常遇到的情况,除此以外,面试也是会经常遇到的,所以,我们来详细说一下jsonp的原理

jsonp主要利用的的原理有两点

1:利用<script></script>标签不受同源策略限制的漏洞

2:在本站脚本声明一个回调函数,并且以参数的形式发送到第三方,第三方返回的其实是以回调函数包裹的一段js语句,形如callback({"name":"hax","grade":"80"}) ,其中callback就是双方约定好的回调函数,括号里面的就是本站脚本需要的数据

当需要通讯时,本站脚本创建一个<script>元素,地址指向第三方的API网址,形如: 

<script src="http://www.example.net/api?param1=1&param2=2"></script>
并提供一个回调函数来接收数据(函数名可约定,或通过地址参数传递)。
第三方产生的响应为json数据的包装(故称之为jsonp,即json padding),形如:
callback({"name":"hax","gender":"Male"})
这样浏览器会调用callback函数,并传递解析后json对象作为参数。本站脚本可在callback函数里处理所传入的数据。



猜你喜欢

转载自blog.csdn.net/ygy211715/article/details/79578886