`
yiminghe
  • 浏览: 1460323 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

cross domain request

 
阅读更多

场景

跨域请求是随着应用服务化而越来越多遇到的问题,大体分为两类

 

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谷歌插件.zip"是一个包含最新版本的cross-request3.0插件的压缩包,该插件专为谷歌浏览器(Chrome)设计。它旨在提升开发人员在API测试和调试过程中的效率,尤其与YApi接口管理工具配合...

    flash跨域策略文件crossdomain.xml配置详解以及防范措施.docx

    7. 对于不需要跨域访问的站点,可以考虑不在根目录下放置 crossdomain.xml 文件,以默认拒绝所有 Flash 跨域请求。 总结,Flash 跨域策略文件 crossdomain.xml 是控制 Flash 应用程序跨域访问的关键。正确配置 ...

    crossdomain

    "crossdomain"这个关键词与Flex应用和GIS(地理信息系统)服务的交互紧密相关。当Flex应用试图从一个源(例如,本地或者一个不同的服务器)访问另一个源(如地图服务器)上的资源时,浏览器的安全策略——安全沙箱会...

    webloigc 中设置 flex crossdomain.xml 文件

    `crossdomain.xml`文件是Adobe Flex应用程序用于定义安全策略的一个关键组件,它允许来自不同源的Flash Player或Flex客户端与服务器进行通信。本篇文章将深入探讨如何在WebLogic环境中设置这个文件,以及它对跨域...

    ArcGIS server tomcat crossdomain.xml

    当这两个组件结合时,可能会遇到浏览器的同源策略限制,这时候就需要通过`crossdomain.xml`文件来进行跨域配置。 `crossdomain.xml`文件是Adobe Flash Player和某些浏览器遵循的一种安全机制,用于允许特定的跨域...

    xpire-crossdomain-scanner:扫描crossdomain.xml策略以查找过期的域名

    《跨域安全扫描:深入理解xpire-crossdomain-scanner》 在互联网的海洋中,数据交互无处不在,跨域资源共享(CORS)是Web应用程序不可或缺的一部分。然而,不恰当的跨域策略配置可能导致安全风险,例如过期的`cross...

    dwr 推技术 demo

    - **CROSS Domain Request**:DWR通过JSONP(JSON with Padding)解决了跨域问题,允许不同域名下的JavaScript访问服务器资源。 - **白名单安全机制**:DWR通过配置文件限制了哪些Java类和方法可以被JavaScript...

    tomcat跨域解决方案

    为了解决这类问题,本文将介绍如何通过编写`crossDomain.xml`文件来实现跨域访问。 #### 二、解决方案 为了解决Tomcat在IP和端口不同时引发的跨域问题,可以通过编写并配置`crossDomain.xml`文件来实现跨域支持。...

    Azure:Blob存储根内部的Crossdomain.xml

    当涉及到跨域访问时,尤其是对于使用Flash技术的客户端应用,`crossdomain.xml`文件扮演着至关重要的角色。这个文件允许你定义跨域策略,使其他域的资源能够与你的Blob存储进行交互。 `crossdomain.xml`文件是Flash...

    swfupload上传文档报400解决办法

    `crossdomain.xml`文件是用于设置跨域策略的一个XML文件,它允许Flash应用程序(如SWFUpload)跨越不同的域名进行数据交互。如果该文件缺失或者放置位置不正确,则会导致上传操作失败,并返回400错误。 #### 解决...

    flex 沙箱安全问题

    1. **正确配置crossdomain.xml**:确保服务器端正确部署了crossdomain.xml文件,并且其配置符合需求。如果使用通配符“*”,则表示允许所有域访问;如果要指定某些特定域名,则应替换为具体的域名列表。 2. **检查...

    Ext.Ajax.request跨域

    当需要跨域请求时,通常会使用CORS(Cross-Origin Resource Sharing,跨源资源共享)这一现代浏览器支持的标准。 1. CORS基础: CORS通过在服务器端设置`Access-Control-Allow-Origin`响应头来允许特定的源进行...

    flex 安全沙箱问题备忘

    在本例中,当***域下的Flash应用需要访问***域下的资源时,我们可以在***的根目录下添加一个crossdomain.xml文件,并设置其内容如下: ```xml &lt;cross-domain-policy&gt; &lt;allow-access-from domain="***"/&gt; &lt;/cross-...

    Flash安全的一些总结WEB安全电脑资料.doc

    Flash安全涉及多个方面,其中最重要的是跨域通信的管理,主要通过`crossdomain.xml`文件进行控制。这个文件是Flash应用程序进行跨域访问时的权限配置文件,它定义了哪些域的Flash内容可以访问和交互数据。以下是关于...

    解决xmlsocket 需要的843端口

    3. 如果`crossdomain.xml`文件存在错误或不完整,Flash Player可能会拒绝建立连接,因此正确配置此文件至关重要。 `crossdomain.xml`文件是定义跨域策略的关键。它的基本结构如下: ```xml &lt;!DOCTYPE cross-domain...

    Flex 安全沙箱问题 简单处理方法

    Flex安全沙箱问题是一个在开发基于...总的来说,解决Flex安全沙箱问题需要深入理解沙箱机制、跨域策略和`crossdomain.xml`文件的配置,同时关注服务器端的实现细节,以确保应用程序既能正常运行,又能保障用户的安全。

    ArcGIS API for Flex开发WebGIS中的安全沙箱问题

    1. **配置crossdomain.xml**:在服务器根目录下创建一个crossdomain.xml文件,明确允许哪些域可以访问你的GIS服务。例如,如果你的GIS服务位于`example.com`,crossdomain.xml可能如下所示: ```xml &lt;!DOCTYPE ...

    Silverlight 跨域文件

    Silverlight的跨域文件,包括`crossdomain.xml`和`clientaccesspolicy.xml`,是解决这个问题的关键。这两个文件允许Silverlight应用从不同源获取数据,从而扩展了它的功能范围,但同时也需要正确配置以确保安全。 ...

    weblogic跨域flex

    创建一个XML文件,例如`crossdomain.xml`,并将其放置在WebLogic服务器的根目录下。这个文件定义了哪些来源(domains)的请求被允许访问服务器资源。以下是一个基本的`crossdomain.xml`文件示例: ```xml ...

    tomcat跨域

    在Tomcat服务器上,我们可以采取多种方法来处理跨域请求,其中最常用的是配置CORS(Cross-Origin Resource Sharing,跨源资源共享)和设置`crossdomain.xml`文件。 ### 1. CORS配置 CORS是一种标准,允许浏览器在...

Global site tag (gtag.js) - Google Analytics