您的位置:首页 > 其它

跨域

2015-06-19 22:31 267 查看
[b]什么是跨域?[/b]

  在不同的域名下进行数据交互就会产生跨域.JS为了安全起见,是不允许不同页面进行数据交互的.

  既然数据无法交互,就会对ajax产生影响,因为ajax是通过xmlHttpRequest进行数据交互,而这个对象在不安全的情况下不允许进行数据交互,所以说ajax不允许跨域.比如一个公司有多个网站,这几个网站进行合作的时候就会产生跨域问题.

[b]什么情况下不存在跨域问题?[/b]

www.a.com/b.js

www.a.com/d.js

[b]以下情况会存在跨域问题.[/b]

1.不同子域

2.不同域名下.哪怕这两个不同的域名指向同一个IP地址,也会存在跨域问题.

[b]解决方式.[/b]

1.子域和主域之间都设置 dcument.domain = "主域名网址";

2.不同域名下通过服务器代理,通过XMLHttpRequeat代理文件.优点:可以做到任何想要的数据交互.缺点:增大服务器压力

3.script标签:jsonp格式,script不存在跨域.所以可以把src当做请求的地址.因为script标签除了可以请求JS文件,其他类型也是可以的.比如:php.只要页面运算完返回的是json或者JS,就不会有问题.

jsonp原理:[b] json+padding:将json填充到一个盒子中.[/b]

 


注意:引入的文件必须放在底部.

动态创建script标签



4.location.hash

跨域无非就是发送一个请求去取页面中的数据,可以通过iframe.比如在a网站中嵌套一个b网站的iframe,可以把数据添加到它的hash值上,因为加上hash是不会改变页面的网址的,这样的话就可以把数据带过去,通过数据带过去之后,b网站进行解析然后返回数据,返回的时候它本身可以通过parent.location.hash = 来更新现在这个页面的hash值,通过更新这个页面的hash值就可以使这个页面来获取b网站上对应的数据了.parent.location.hash这个方法是另一个域下的,有的浏览器不支持,比如ie chrome.解决方法:可以再去创建一个a网站的页面,比如:yyy.html#,因为他们是同一个网站下的,这个时候parent.location.hash=self.location.hash.通过改变hash值来进行双域之间的数据交互.

5.window.name



总结:

  jsonp有一个缺点,它只是一个单域操作,就像以上说的,b网站的数据(我们要获取的)是不能修改的,而iframe的hash值是可以双域操作的.window.name比较安全,因为它不会暴露出来,各有好处,工作时需要择优选择.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: