JSONP与JSON的区别:
JSONP 是一种非正式传输协议,该协议的一个要点就是允许用户传递一个callback 或者开始就定义一个回调方法,参数给服务端,然后服务端返回数据时会将这个callback 参数作为函数名来包裹住 JSON 数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了。
JSONP 和 JSON 的区别: JSON 是一种传输格式,而 JSONP 呢是一种数据的获取方式。其实他们没什么相关性,有的人说带callback 的 JSON 传输就是 JSONP ,下面我会证明这是错误的说法。 JSONP 可以跨域,记住这一点就可以了。下面开始 Demo 演示。
二、什么是跨域?
跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的。浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。所谓同源即:协议、域名、端口号都相同,否则就是不同源的。可参考以下实例:
URL 说明 是否允许通信
http://www.a.com/a.js
http://www.a.com/b.js 同一域名下 允许
http://www.a.com/lab/a.js
http://www.a.com/script/b.js 同一域名下不同文件夹 允许
http://www.a.com:8000/a.js
http://www.a.com/b.js 同一域名,不同端口 不允许
http://www.a.com/a.js
https://www.a.com/b.js 同一域名,不同协议 不允许
http://www.a.com/a.js
http://70.32.92.74/b.js 域名和域名对应ip 不允许
http://www.a.com/a.js
http://script.a.com/b.js 主域相同,子域不同 不允许
http://www.a.com/a.js
http://a.com/b.js 同一域名,不同二级域名(同上) 不允许(cookie这种情况下也不允许访问)
http://www.cnblogs.com/a.js
http://www.a.com/b.js 不同域名 不允许
14.跨域访问
-
什么是跨域访问
- 跨域访问就是跨域名访问,即A网站的网页在代码*问了B网站的页面
- 由于同源策略(浏览器的安全机制),所以,AJAX不能实现跨域访问。
同源策略:这是一种浏览器策略,浏览器的安全机制:浏览器只允许来自同一个来源的文件相互访问。(前段与后端)
同源:同样的协议,同样的地址,同样的端口
JavaScript或Cookie只能访问同域名下的内容同样的协议,同样的地址,同样的端口。
-
AJAX不支持跨域访问,为了达到跨域访问的目的,出现了很多的解决方案 :JSONP,iframe,flash,xhr2等。但是比较常用的是JSONP。
-
JSONP(JSON with Padding)可用于解决主流浏览器的跨域数据访问的问题。跟JSON没有关系。 这是一种跨域的技巧。
-
JSONP是如何实现跨域访问的?本质上是利用HTML元素的src属性都可以跨域的思路来解决的。 因为src是可以跨域的。
如:img,script,iframe等标记的src属性的值都可以赋成其它域名的合法地址。
由于按照jsonp的这种方式跨域访问时,好像可以利用javascript和服务器端交互,能达到AJAX中XMLHttpRequest对象同样的效果。所以,人们总是把
jsonp和AJAX联系在一起。