场景
跨域请求是随着应用服务化而越来越多遇到的问题,大体分为两类
1. 子域间通信:a.t.com 要和 b.t.com 通信
2. 完全不同域间通信:t.com 要和 m.com 通信
1 可以看做是 2 的特例,不过解决方法更简单点.
解决方案
完全不同域间通信
w3c 很早就考虑到了这种需求,提出了 Cross-Origin Resource Sharing 标准,通过定义一系列请求头和响应头,可以在客户端透明(或者经过很少的修改)得支持跨源的 xmlhttprequest。
服务器通过返回响应头进行权限控制,例如
Access-Control-Allow-Origin 控制那些外部请求可以访问该资源
Access-Control-Allow-Credentials 结合客户端 xmlhttprequest 的 withCredentials 属性可以控制是否发送 cookie 等验证信息
Access-Control-Allow-Headers 控制客户端可以发送的额外头部信息.
那么只要 b.t.com 的响应设置合适的头部信息,最好情况下 a.t.com 可以不经过任何修改就可以向 b.t.com 发请求.
ie 的例外
不出预料,ie 不完全支持此规范:
ie>=8
有自己的一套跨域请求机制 XDomainRequest ,通过替换 XmlHttpRequest 为 XDomainRequest 也可以往外部域发请求,但服务器端控制就少点,只能设置
Access-Control-Allow-Origin 控制那些外部请求可以访问该资源
也就意味着:不能发送 cookie 信息, 不能设置额外请求头。
ie<8
则是完全不支持,流行的做法是 flash 模拟,安全则交给 crossdomain.xml 控制,目前看来, ie<8 且不装 flash 的确实很少,可行!凑巧的是 flash 在 ie 下携带 cookie 信息,在其他浏览器下则不携带 cookie 信息,如果一定要附带 cookie 信息,那 ie 全平台都要用 flash 方案了。
另一种思路:
jsonp 不多说,最简单的一种,虽然控制少点(但服务器通过 refer 仍然可以限制来源请求)以及不能 post 数据(写操作受限),也算一个不错的选择。
子域间请求
子域访问作为跨域访问的特例,上述方法的任意一种都可行,但由于请求双方间共享一个主域,因而存在另外一种方案:
cross sub domain xmlhttprequest using proxy page
场景:
a.t.com 希望发请求给 b.t.com 的资源地址,但 b.t.com 的资源实际上只能通过 b.t.com 下的请求才能访问,而我们知道通过设置
document.domain = "t.com" ;
那么 a.t.com 就可以操作 b.t.com 的文档以及 window 对象。
具体做法为 引入 b.t.com/proxy.htm,内容为
<script>
document.domain="t.com"
</script>
将其作为 iframe 嵌入到欲发请求的 a.t.com 页面,a.t.com 通过操纵 b.t.com/prxoy.html 自身的 xmlhttprequest 向 b.t.com 发请求,这样子就可以绕过 a.t.com 自己的 xmlhttprequest 同源限制了.
问题
domain 设置是不可逆的,一旦主页面设置了 domain,那么其包含的iframe除非设置和主页面相同的 domain,否则就不能再和主页面通信,会导致大量的已有代码修改。
推荐:一开始进行全局总体设计时就规定所有子域页面统统设置 domain 为主域(全局脚本统一设置?)。
All In One
通过统一的接口,实际上可以做出透明的请求发送客户端,调用者不需要考虑以上细节,只要指定请求地址,通过工厂模式系统自动生成合适的客户端进行处理.
- 大小: 393.4 KB
分享到:
相关推荐
【标题】"cross-request3.0谷歌插件.zip"是一个包含最新版本的cross-request3.0插件的压缩包,该插件专为谷歌浏览器(Chrome)设计。它旨在提升开发人员在API测试和调试过程中的效率,尤其与YApi接口管理工具配合...
7. 对于不需要跨域访问的站点,可以考虑不在根目录下放置 crossdomain.xml 文件,以默认拒绝所有 Flash 跨域请求。 总结,Flash 跨域策略文件 crossdomain.xml 是控制 Flash 应用程序跨域访问的关键。正确配置 ...
"crossdomain"这个关键词与Flex应用和GIS(地理信息系统)服务的交互紧密相关。当Flex应用试图从一个源(例如,本地或者一个不同的服务器)访问另一个源(如地图服务器)上的资源时,浏览器的安全策略——安全沙箱会...
`crossdomain.xml`文件是Adobe Flex应用程序用于定义安全策略的一个关键组件,它允许来自不同源的Flash Player或Flex客户端与服务器进行通信。本篇文章将深入探讨如何在WebLogic环境中设置这个文件,以及它对跨域...
当这两个组件结合时,可能会遇到浏览器的同源策略限制,这时候就需要通过`crossdomain.xml`文件来进行跨域配置。 `crossdomain.xml`文件是Adobe Flash Player和某些浏览器遵循的一种安全机制,用于允许特定的跨域...
《跨域安全扫描:深入理解xpire-crossdomain-scanner》 在互联网的海洋中,数据交互无处不在,跨域资源共享(CORS)是Web应用程序不可或缺的一部分。然而,不恰当的跨域策略配置可能导致安全风险,例如过期的`cross...
- **CROSS Domain Request**:DWR通过JSONP(JSON with Padding)解决了跨域问题,允许不同域名下的JavaScript访问服务器资源。 - **白名单安全机制**:DWR通过配置文件限制了哪些Java类和方法可以被JavaScript...
为了解决这类问题,本文将介绍如何通过编写`crossDomain.xml`文件来实现跨域访问。 #### 二、解决方案 为了解决Tomcat在IP和端口不同时引发的跨域问题,可以通过编写并配置`crossDomain.xml`文件来实现跨域支持。...
当涉及到跨域访问时,尤其是对于使用Flash技术的客户端应用,`crossdomain.xml`文件扮演着至关重要的角色。这个文件允许你定义跨域策略,使其他域的资源能够与你的Blob存储进行交互。 `crossdomain.xml`文件是Flash...
`crossdomain.xml`文件是用于设置跨域策略的一个XML文件,它允许Flash应用程序(如SWFUpload)跨越不同的域名进行数据交互。如果该文件缺失或者放置位置不正确,则会导致上传操作失败,并返回400错误。 #### 解决...
1. **正确配置crossdomain.xml**:确保服务器端正确部署了crossdomain.xml文件,并且其配置符合需求。如果使用通配符“*”,则表示允许所有域访问;如果要指定某些特定域名,则应替换为具体的域名列表。 2. **检查...
当需要跨域请求时,通常会使用CORS(Cross-Origin Resource Sharing,跨源资源共享)这一现代浏览器支持的标准。 1. CORS基础: CORS通过在服务器端设置`Access-Control-Allow-Origin`响应头来允许特定的源进行...
在本例中,当***域下的Flash应用需要访问***域下的资源时,我们可以在***的根目录下添加一个crossdomain.xml文件,并设置其内容如下: ```xml <cross-domain-policy> <allow-access-from domain="***"/> </cross-...
Flash安全涉及多个方面,其中最重要的是跨域通信的管理,主要通过`crossdomain.xml`文件进行控制。这个文件是Flash应用程序进行跨域访问时的权限配置文件,它定义了哪些域的Flash内容可以访问和交互数据。以下是关于...
3. 如果`crossdomain.xml`文件存在错误或不完整,Flash Player可能会拒绝建立连接,因此正确配置此文件至关重要。 `crossdomain.xml`文件是定义跨域策略的关键。它的基本结构如下: ```xml <!DOCTYPE cross-domain...
Flex安全沙箱问题是一个在开发基于...总的来说,解决Flex安全沙箱问题需要深入理解沙箱机制、跨域策略和`crossdomain.xml`文件的配置,同时关注服务器端的实现细节,以确保应用程序既能正常运行,又能保障用户的安全。
1. **配置crossdomain.xml**:在服务器根目录下创建一个crossdomain.xml文件,明确允许哪些域可以访问你的GIS服务。例如,如果你的GIS服务位于`example.com`,crossdomain.xml可能如下所示: ```xml <!DOCTYPE ...
Silverlight的跨域文件,包括`crossdomain.xml`和`clientaccesspolicy.xml`,是解决这个问题的关键。这两个文件允许Silverlight应用从不同源获取数据,从而扩展了它的功能范围,但同时也需要正确配置以确保安全。 ...
创建一个XML文件,例如`crossdomain.xml`,并将其放置在WebLogic服务器的根目录下。这个文件定义了哪些来源(domains)的请求被允许访问服务器资源。以下是一个基本的`crossdomain.xml`文件示例: ```xml ...
在Tomcat服务器上,我们可以采取多种方法来处理跨域请求,其中最常用的是配置CORS(Cross-Origin Resource Sharing,跨源资源共享)和设置`crossdomain.xml`文件。 ### 1. CORS配置 CORS是一种标准,允许浏览器在...