浏览器的跨域问题以及解决方案

来源:互联网 发布:mac .m2文件夹 编辑:程序博客网 时间:2024/06/05 23:53

1、跨域问题
JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象,即同源政策。
2、什么是同源?
所有浏览器都实行这个政策。最初,它的含义是指,A网页设置的 Cookie,B网页不能打开,除非这两个网页”同源”。所谓”同源”指的是”三个相同”。
(1)协议相同 (2)域名相同 (3)端口相同
具体实例 比如:
http://www.example.com/zw/index.html这个网站,它的协议是http://,域名是www.example.com,端口号是80(默认端口可以省略),它的同源情况如下:
①、http://www.example.com/zwxk/manager.html 同源
②、https://www.example.com/zw/index.html 不同源(协议不同)
③、http://examle.com/zw/index.html 不同源(域名不同)
④、http://www.example.com:81zw/index.html 不同源(端口号不同)
3、同源政策的目的
同源策略的目的是为了保证用户信息的安全。防止恶意的网站盗取数据。
设想这样一个情景:A网站是一家银行,用户登录以后,又去浏览其他的网站B,如果网站B可以读取A网站的Cookie,会发生什么问题?显然,如果Cookie包含隐私(比如存款总额),这些信息就会泄露,更可怕的是,Cookie往往用来保存用户的登录状态,如果用户没有退出登录,其他网站就可以冒用户,为所欲为。因为浏览器同时还规定,提交表单不受同源策略的限制。由此可见,“同源政策”的必要性,否则Cookie可以共享,互联网就毫无安全可言了。
4、非同源限制范围
随着互联网的发展,“同源政策”越来越严格。目前,如果非同源,共有三种行为受到限制。
(1)Cookie、LocalStorage和IndexDB无法获取。
(2)DOM无法获得。
(3)AJAX请求不能发送。
虽然这些限制是必要的,但是有时很不方便,合理的用途也受到影响。下面将介绍如何规避上面三种限制。
4-1、解决跨域一:Cookie如何实现跨域
Cookie是服务器写入浏览器的一段信息,只有同源的网页才能共享,但是,两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置document.domain共Cookie。
举例来说,A网站是:http:weibo.qq.com
B网站是:http:lol.qq.com
那么只需设置相同的document.domain,两个网页就可共享Cookie。

    document.domain = 'qq.com';  

现在,A网页通过脚本设置一个Cookie。

    document.Cookie = "test1=hello";  

B网页就能读到这个Cookie。

    var getCookie = document.cookie;  

注意:这种方法只适用于Cookie和iframe窗口,LocalStorage和IndexDB无法通过这种方法规避,而要使用下文将介绍的PostMessage API。
另外,服务器也可以在设置Cookie的时候,指定Cookie的所属域名为一级域名,比如:.qq.com

    Set-Cookie:key=value;domain=<span style="color:#cc0000;">.qq.com</span>;path=/  
0 0