跨域

跨域_第1张图片


同源策略:它是由Netscape提出的一个著名的安全策略。所谓同源指的是协议、域名、端口号相同。举个例子,a.com的js是无法访问b.com下面的对象,而跨域的话就是要打破这一限制


跨域_第2张图片

处理跨域的方法:1、访问域名的代理服务器(偏后台)

2.JSONP

跨域_第3张图片

关于jsonp实现的原理:确实弄了半天。浏览器并不是对所有的东西都有同源策略的限制,比如说script、ing的src属性,而ajax这里是收到了同源策略的限制,因为是无法进行跨域的,所以需要通过jsonp。json原理:在js中,我们直接用XMLHttpRequest来请求不同域上的js脚本文件是不可以的,但是在页面上引入不同域上的js脚本却是可以的。jsonp正是利用这个特性来实现的。其原理是 通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入,所以jsonp是需要服务器端的页面进行相应的配合。

原理是一样的,只不过我们不需要手动的插入script标签以及定义回调函数。jquery会自动生成一个全局函数来替换callback=?中的问好,之后获取到数据后又会自动销毁,实际上就是起一个临时代理函数的作用。$.getJSON方法会自动判断是否跨域,不跨域的话,就调用一般的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。


跨域_第4张图片

3.通过修改document.domain来跨子域

浏览器都有一个同源策略,其限制之一就是第一种方法中我们说的不能通过ajax的方法请求不同源中的文档;第二个限制是浏览器中不同域的框架是不能进行js交互操作的。有一点是需要说明的,不同的框架之间(父子或同辈),是能够获取到彼此的window对象,但不能用window对象属性和方法。简单的来说,就是设置相同的主域

4.window.name

5.HTML5新引进的window.postMessage方法来跨域传送数据。

你可能感兴趣的:(跨域)