日期:2014-05-16  浏览次数:20326 次

javascript同源策略和跨域实验及其跨域解决办法

一、问题提出: 从应用A跳转到应用B,用户在应用B上操作完毕后,关闭页面,是否可以用程序自动刷新应用A窗口,以让用户观察操作效果。如支付宝充值,跳转到各银行界面进行充值,充值完毕后,支付宝页面相关自动刷新。(当然由于跨域问题,支付宝并没有这么做,而是弹出层让用户回来确认是否充值完毕)
二、问题分析: 应用A采用域名http://trade.alibaba.com ,应用B采用的域名 http://56.alibaba.com。属于相同主域下的不同子域。牵涉出跨域是否能操作其他文档
三、问题延伸: 了解跨域,我们先了解一下javascript的同源策略,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性。如果它们的协议、端口(如果指明了的话)和主机名都相同。则他们属于同源。深入了解同源策略对我们解决问题有很大帮助。
四、实验目的:
??? 1、证明同源策略在各大浏览器下的表现是否统一
??? 2、不同加载方式对同源策略的是否有不同的影响(包括父窗口打开子窗口、父窗口iframe子窗口、ajax调用其他域下的文档加载)
??? 3、探寻解决跨域问题的办法
五、实验准备:
1、根据实验的目的,我们把我们需要做的实验用列表的方式展现出来,方便得出结论。结论填入下表

1 类型 页面A 页面B 页面关系和浏览器表现
(N为出错,Y为正常)
open iframe ajax
ie ff g ie ff g ie ff g
2 协议、端口、域均相同

http://www.alibaba.com/

domain1/a.htm

http://www.alibaba.com/

domain2/b.htm

Y Y Y Y Y Y Y Y Y
3 协议、端口、域均相同

http://www.alibaba.com:8080/

domain1/a.htm

http://www.alibaba.com:8080/

domain2/b.htm

Y Y Y Y Y Y Y Y Y
4 协议不同

http://www.alibaba.com/

domain1/a.htm

https://www.alibaba.com/

domain2/b.htm


5 端口不同

http://www.alibaba.com/

domain1/a.htm

http://www.alibaba.com:8080/

domain2/b.htm

N N N N N N N N N
6 域不同

http://www.alibaba.com/

domain1/a.htm

http://www.alisoft.com/

domain2/b.htm

N N N N N N N N N
7 子域(主机名)不同

http://56.alibaba.com/

domain1/a.htm

http://trade.alibaba.com/

domain2/b.htm

N N N N N N N N N
8 子域(主机名)不同,子域为空

http://alibaba.com/

domain1/a.htm

http://56.alibaba.com/

domain2/b.htm

N N N N N N N N N
9

子域不同设置

document.domain

="alibaba.com"

属性后

http://56.alibaba.com/

domain1/a.htm

http://trade.alibaba.com/

domain1/a.htm

Y Y Y Y Y Y N N N
10 域不同,IP相同

http://56.alibaba.com/

domain1/a.htm

http://127.0.0.1/

domain2/b.htm

N N N N N N N N N
11 本地打开

file:///D:/test/domain1/

domain1/a.htm

http://56.alibaba.com/

domain2/b.htm

N N N N N N N