- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Javascript 跨域访问处理方案
在用户端编程语言中,如javascript和ActionScript,同源策略是一个很关键安全理念,它在确保数据安全性方面有着关键意义。同 源策略要求跨域之间脚本是隔离,一个域脚本不能访问和操作另外一个域绝大部分属性和方法。那么什么叫相同域,什么叫不一样域呢?
同源策略
在用户端编程语言中,如javascript和 ActionScript,同源策略是一个很关键安全理念,它在确保数据安全性方面有着关键意义。同源策略要求跨域之间脚本是隔离,一个域脚本不能访问和操作另外一个域绝大部分属性和方法。那么什么叫相同域,什么叫不一样域呢?当两个域含有相同协议(如http), 相同端口(如80),相同host(如),那么我们就能够认为它们是相同域。比如 和是同域,而, , , 中任何两个全部将组成跨域。同源策略还应该对部分特殊情况做处理,比如限制file协议下脚本访问权限。当地HTML文件在浏览器中是经过file协议打开,假如脚本能经过file协议访问到硬盘上其它任意文件,就会出现安全隐患,现在IE8还有这么隐患。
受到同源策略影响,跨域资源共享就会受到制约。不过伴随大家实践和浏览器进步,现在在跨域请求技巧上,有很多宝贵经验沉淀和积累。这里我把跨域资源共享分成两种,一个是单向数据请求,还有一个是双向消息通信。接下来我将罗列出常见部分跨域方法,以下跨域实例源代码能够从这里取得。
什么是跨域
JavaScript出于安全方面考虑,不许可跨域调用其它页面对象。但在安全限制同时也给注入iframe或是ajax应用上带来了不少麻烦。这里把包含到跨域部分问题简单地整理一下:
首先什么是跨域,简单地了解就是因为JavaScript同源策略限制, 域名下js无法操作或是域名下对象。更具体说明能够看下表:
URL
说明
是否许可通信
/a.js/b.js
同一域名下
许可
/lab/a.js/script/b.js
同一域名下不一样文件夹
许可
:8000/a.js/b.js
同一域名,不一样端口
不许可
/a.js/b.js
同一域名,不一样协议
不许可
/a.js4/b.js
域名和域名对应ip
不许可
/a.js/b.js
主域相同,子域不一样
不许可
/a.js/b.js
同一域名,不一样二级域名(同上)
不许可(cookie这种情况下也不许可访问)
/a.js/b.js
不一样域名
不许可
尤其注意两点:
第一,假如是协议和端口造成跨域问题“前台”是无能为力,
第二:在跨域问题上,域仅仅是经过“URL首部”来识别而不会去尝试判定相同ip地址对应着两个域或两个域是否在同一个ip上。“URL首部”指tocol +window.location.host,也能够了解为“Domains, protocols and ports must match”。
接下来简单地总结一下在“前台”通常处理跨域措施,后台proxy这种方案牵涉到后台配置,这里就不管述了,有爱好能够看看yahoo这篇文章:《 JavaScript: Use a Web Proxy for Cross-Domain XMLHttpRequest Calls》
1、document.domain+iframe设置
对于主域相同而子域不一样例子,能够经过设置document.domain措施来处理。具体做法是能够在:///b.html两个文件中分别加上document.domain = ‘’;然后经过a.html文件中创建一个iframe,去控制iframecontentDocument,这么两个js文件之间就能够“交互”了。当然这种措施只能处理主域相同而二级域名不一样情况,假如你异想天开把domian设为那显然是会报错地!代码以下:
.com上a.html
document.domain = ;
var ifr = document.createElement(iframe);
ifr.src = ;
ifr.style.display = none;
document.body.appendChild(ifr);
ifr.onload = function(){
var doc = ifr.contentDocument || ifr.contentWindow.document;
// 在这里操纵b.html
alert(doc.getElementsByTagName(h1)[0].childNodes[0].nodeValue);
};
上b.html
document.domain = ;
这种方法适适用于{.com, , , }中任何页面相互通信。
备注:某一页面domain默
原创力文档


文档评论(0)