跨域问题的总结

这里不再赘述同源政策。
1.cookie的跨域
只有同源的网站才能共享Cookie,但是如果两个网站一级域名相同,只是二级域名不同,那么就有两种解决的方法:
A:在两个页面上设置相同的document.domain,那么cookie可以共享。
B:或者在服务端,在cookie上设置相同的domain


2.iframe的跨域
父窗口获取不到子窗口的dom,子窗口也获取不到父窗口的dom;如果一级域名相同,二级域名不同,那么和cookie一样设置相同的document.domain,就可以了,如果完全不相同,有三种解决跨域窗口的通信问题
A:片段识别符
片段标识符是指的是:在URL的#号后面的部分,比如http://example.com/x.html#fragment的#fragment部分,如果只是改变#号后面的页面不会刷新。父窗口可以把信息,写入子窗口的片段标识符中。在子窗口中通过window.onhashchange得到这个消息,同样子窗口也可以改变父窗口的片段标识符
B:window.name
浏览器窗口有个window.name属性,这个属性的最大特点是,无论是否同源,只要是在同一个窗口里,前一个网页设置了这个属性,后一个网页就可以读取它。
C:跨文档通信API(cross-document messaging)
上面两种方法都是破解,HTML5为了解决这个问题,引入了一个全新的API:跨文档通信API,这个API为window对象新增了一个window.postMessage()方法,允许跨窗口通信,不论这两个窗口是否同源,


3.AJAX的跨域
同源政策规定AJAX只能发送给同源的网址,否则就报错。
除了架设代理服务器(AJAX想代理服务器发出同源清求,然后在由代理服务器请求外部服务器),有三种方法规避这个限制。
A:JSONP
JSONP是跨域清求常用的方法,最大的特点就是简单适用,老式浏览器全部都支持,服务器改造也非常小。JSONP的基本思想是向网页添加一个script标签,由这个标签来向服务器清求JSON数据,这种做法不受同源政策的限制,服务器收到清求后,将数据放在一个指定名字的回调函数里,传回来。
B:Websocket
Websocket是HTML5新加入的一种通信协议,使用ws://(非加密)和wss://(加密)作为协议前缀,该协议不实行同源政策,只要服务器支持,就可以通过它进行跨域。
C:CORS:请看我的另一篇文章。

xmlhttp跨域问题

12-23

最近在实现一个在html静态页面中动态显示客户评价的程序的时候遇到xmlhttp跨域问题,请求解决方法:rn需求:rn 本网站是一个B2B的电子商务平台(www.easyeb.com),在用户注册一个高级会员时,我们的工作人员会为其分配一个二级域名(例如wyyy.easyeb.com)的网上商铺,而我们的网上商铺都是静态页面的(根据会员的资料生成的html文件,组成其网上商铺),而在这个网上商铺中,我们有一个页面是用来显示会员评价的,会员评价可以按性质(好评,中评,差评)和评价者身份(买家和卖家),在这个页面上,我们需要实现按浏览者意图动态显示评价内容(例如,浏览者想查看该会员得到的好评,他在下拉式列表框中选择“好评”,我们就可以显示所有好评的评价内容...)。rn实现及问题:rn 在实现是我们采用了ajax式的方式,通过xmlhttp动态访问服务器端的servlet而取得数据,但是在其过程中出现一个问题:动态取得数据的servlet被配置在www.easyeb.com下,而xmlhttp要在wyyy.easyeb.com通过访问servlet取得数据(xmlhttp.open("GET",http://www.easyeb.com/servlet,true)),js的安全策略认为xmlhttp跨域访问(从wyyy.easyeb.com访问www.easyeb.com下的servlet),始终提示js错误——“拒绝访问”。rn我该怎么办呢?在页面中设置document.domain属性试过了,它要求在所有页面中都设置,那我在servlet中怎么设置呢?这个方法我们没有走通。请求其他解决办法。rn本网站服务器构架(apache+tomcat5.0)rn

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试