1.简介
跨域请求,顾名思义,就是一个站点中的资源去访问另外一个不同域名站点上的资源。这种情况很常见,比如说通过style标签加载外部样式表文件、通过 img 标签加载外部图片、通过 script 标签加载外部脚本文件、通过 Web font 加载字体文件等等。默认情况下,脚本访问文档属性等数据采用的是同源策略(Same origin policy)。
同源策略:如果两个页面的协议、域名和端口是完全相同的,那么它们就是同源的。同源策略是为了防止从一个地址加载的文档或脚本访问或者设置从另外一个地址加载的文档的属性。如果两个页面的主域名相同,则还可以通过设置document.domain 属性将它们认为是同源的。
注:IE的同源策略不包含端口。
出于安全性考虑,浏览器将不允许跨域页面间的JS相互操作,如:主页面和跨域IFrame之间的JS操作,也不允许XMLHttprequest请求跨域内容。
2.解决方案
1)设置document.domain属性
适用于主域名相同的跨域情形。
2)HASH传值
需要设置监听来捕获HASH值的动态改变。
3)JS脚本植入
通过页面动态加载<script>标签实现,该标签的SRC属性设置为跨域请求的URL地址,返回的内容为method(...)形式,其中method为页面内的JS回调函数,通过执行该函数来实现改变。
4)跨域请求标准实现
W3C 工作组中的 Web Applications Working Group(Web 应用工作组)发布了一个 Cross-Origin Resource Sharing(跨域资源共享规范)推荐规范来解决跨域请求的问题。该规范提供了一种更安全的跨域数据交换方法。具体规范的介绍可以访问上面提供的网站地址。值得注意的是:该规范只能应用在类似XMLHttprequest 这样的 API 容器内。IE8、Firefox 3.5 及其以后的版本、Chrome浏览器、Safari 4 等已经实现了 Cross-Origin Resource Sharing 规范,已经可以进行跨域请求了。
5)JQuery实现
JQuery.ajax提供了一种dataType为jsonp的访问方式,其实现方式其实就是JS脚本植入。
3.实例
见附件crossDomain.war
将该应用部署在本地的两个不同的端口上,如8080和8380,其中一个端口必须为8380,
访问http://http://localhost:8080/crossDomain/outer.jsp
可在该页面看到上述的所有解决方案的实现方式。
4.参考资料
相关推荐
JS跨域访问解决
JS跨域访问解决方案总结.。总结了记住JS跨域访问解决方案。
js跨域访问解决方案总结,不同域名下cookie相互操作
JS跨域访问解决方案总结[参照].pdf
JS跨域访问解决方案总结.pdf
服务器端用可控js跨域访问服务器端用可控js跨域访问
Javascript跨域访问解决方案 个人在网上搜集的资料,用于传输信息,不提倡下载
文档内容详细,只需要负责粘贴,并替换url即可使用
JS跨域访问解决方案的总结.doc跨域请求,顾名思义,就是一个站点中的资源去访问另外一个不同域名站点上的资源。这种情况很常见,比如说通过style标签加载外部样式表文件、通过 img 标签加载外部图片、通过 script ...
通过HTTPClient界面在JSP中嵌入iframe子界面跨域时,无法获取跨域界面的属性值的问题
js解决跨域访问问题,在用js访问web后台方法的时候,有时候会遇到跨域访问的问题。文档中介绍了跨域访问产生的原因以及相应的解决办法及代码示例。
js_跨域访问[参照].pdf
本demo为通过jquery 来进行json的跨域访问的小例子。简单易懂!
不同软件系统下 js 实现跨域访问
...