标签:
大家应该都听说过,Jsonp是实现“跨域”的一种解决方案。
那么,我们要先从跨域说起,什么叫做跨域呢?我觉得百度到的解释都不够精确,从当前站点发往不同站点(协议、域名、端口任意一个或多个不同)的请求叫做跨域,同样对于被请求方,来自不同站点(与当前站点所对应的协议、域名、端口任意一个或多个不同)的请求就叫做跨域请求,我觉得这里只强调了不同站点,却忽略了“请求”的类型。
其实,发自脚本或其它非浏览器发出的跨域请求发生跨域,才能叫做跨域,比如js代码中跨域发出的xmlhttprequest请求,而浏览器发出的普通、常规http请求,根本就没跨域之说,难道我本站外链其它网站图片链接,也叫跨域请求,还需要缺省条件下禁止么?这完全不符合web应用程序的开发理念。
所以我认为,跨域,应该是指非常规http请求。而jsonp请求恰恰就是普通的常规的http请求,跟你在浏览器地址栏里敲url或表单post数据是一样的类型,只不过,服务器端的输出有点门道。是什么门道呢?
服务器端的指定页面或处理程序收到jsonp请求(其实就是普通的http请求),会输出一段文本(里面包含了服务器处理的结果数据或参数),然后这段文本会返回给请求方,渲染到请求方引用请求的地方(比如脚本代码段),而这段文本,在请求方的渲染之处,恰好是有效的,可以运行的一段代码,如此,请求方便成功地取到了服务器端的数据。经常听到的callback参数,就是告诉服务器端,输出文本时,把这个参数里的值当做函数名格式化输出到返回文本(字符串)里。
说到这里我想你应该明白了,没错,就根本就是api的一种形式,哪里是什么跨域。。分明就是一种协议约定,微博api就支持这样的协议。能提供jsonp服务的地方,其实它的接口也是开放的(当然需要你注册,填写有效域名,发给你token等),并不是说jsonp是一种必然有效可用的“技术”。唉。。为什么不象微信一样直接搞web api呢。。
标签:
原文地址:http://www.cnblogs.com/laozuan/p/4747086.html