什么缘由使jsonp诞生? javascript
传说,浏览器有一个很重要的安全限制,叫作"同源策略"。同源是指,域名,协议,端口相同。举个例子,用一个浏览器分别打开了百度和谷歌页面,百度页面在执行脚本的时候就会检查这个脚本是否属于百度页面,只有和百度同源的脚本才会执行,这就是同源策略。(至关于给脚本按了一个大门,只容许在大门内部活动)java
可是咱们在工做中有时又会须要和不一样域名的网站进行交流,因为同源策略的限制,使操做变得有些困难。jsonp是目前比较主流的跨域方式。什么是jsonp呢?咱们来了解一下。json
jsonp和json有什么关系吗?跨域
jsonp(JSON with Padding)和json很像,但却彻底不是一回事儿。json和xml有些相似,是用于存储和表达数据的一种方式,也是javascript对象的表示。而jsonp是获取、传递数据的一种方式。打个比方,在早前的飞鸽传书,你们都知道吧?json至关于传递的书信,而jsonp是携带书信的飞鸽。这么一说,相信你们就都明白了!^_^浏览器
jsonp的原理是什么?安全
总体来讲,jsonp实现跨域的原理是跨域的服务端把客户端所须要的数据放进客户端本地的一个js方法里,进行调用,客户端在本地的js对返回的数据进行处理。这样就实现了不一样域名下的两个站点间的交流。函数
因为<script>标签的src能够跨域,利用这一点,就有了jsonp这种非正式传输协议。由于有多是多个不一样站点都要访问这个服务端,那么各个站点要调用的方法多是各不相同的,若是把方法名写死的话,就会很不和谐。因此解决的办法是各个站点来访问服务端时,在url中带一个参数(callback)过来,服务端获取到这个参数,就会在生成js代码时,以这个callback参数做为方法名,再把数据放到这个方法里。这样各个站点就能够调用各自的方法了。这也是jsonp的一个要点。jsonp
jsonp实现方式网站
写一个模拟jsonp原理的一个简单的例子url
本地客户端:
<script type="text/javascript" src="http://example.com/Index.aspx?callback=Hello"></script>
本地回调函数
function Hello(data){ alert(data.result); }
跨域服务端:
protected void Page_Load(object sender, EventArgs e) { string callback=Request.QueryString["callback"];//获取客户端回调函数名,值为"Hello" Response.Write(callback+"({result:1})"); //调用客户端指定函数,并把数据传进去 }