zoukankan      html  css  js  c++  java
  • CrossDomain.xml的作用及其简单用法

    使用crossdomain.xml让Flash可以跨域传输数据

    本文来自http://www.mzwu.com/article.asp?id=975

    一、概述

    位于www.mzwu.com域中的SWF文件要访问www.163.com的文件时,SWF首先会检查163服务器目录下是否有crossdomain.xml文件,如果没有,则访问不成功;若crossdomain.xml文件存在,且里边设置了允许www.mzwu.com域访问,那么通信正常。所以要使Flash可以跨域传输数据,其关键就是crossdomain.xml。

    二、crossdomain.xml文件格式

    crossdomain.xml的格式非常简单,其根节点为<cross-domain-policy> ,其下包含一个或多个<allow-access-from>节点,<allow-access-from>有一个属性domain,其值为允许访问的域,可以是确切的 IP 地址、一个确切的域或一个通配符域(任何域)。下边是两个例子:

    程序代码

    <?xml version="1.0"?>

    <cross-domain-policy>

    <allow-access-from domain="www.friendOfFoo.com" />

    <allow-access-from domain="*.foo.com" />

    <allow-access-from domain="105.216.0.40" />

    </cross-domain-policy>

    程序代码

    <?xml version="1.0"?>

    <cross-domain-policy>

    <allow-access-from domain="*" />

    </cross-domain-policy>

    第二个例子允许任何域的访问。对于crossdomain.xml文件存放位置,建议将其存放于站点根目录中!

    三、示例

    1.SWF文件主要Actionscript:

    程序代码

    on (release) {

    var myvar = new LoadVars();

    myvar.t = t2.text;

    myvar.sendAndLoad("http://www.163.com/test.asp",myvar,"post");

    myvar.onLoad = function(re){

    if(re){

    t1.text = myvar.t;

    }else{

    t1.text = "fail...";

    }

    }

    }

    2.test.asp代码:

    程序代码

    <%

    Dim t

    t = Request.form("t")

    Response.write("t=" & t & " back!")

    %>

    --------------------------------------------------------------------------------------------------------

    <?xml version=”1.0″?>
    <!DOCTYPE cross-domain-policy SYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
    <cross-domain-policy>
    <site-control permitted-cross-domain-policies=”by-content-type” />
    </cross-domain-policy>

    蓝色行的意思是,要符合要求的文件你才能取,不管你是哪来的flash数据请求。符合要求的文档必须满足:Content-Type: text/x-cross-domain-policy

    另:

    当Flex访问WebService服务时,在本地能够正常访问,当部署到web容器中发布为web服务后,再调用WebServicIE,此时就会被拒绝访问,这就是Flex跨域访问的沙箱问题,
    为了解决Flex跨域访问WebService的问题,可采用如下方案:
    首先,跨域访问被拒绝是因为提供服务方没有配置安全策略文件,即crossdomain.xml,如果你不想用crossdomain.xml就要用到代理,即自己写一个后台读取webservice,然后提供给自己的flex应用,因为在flashplayer中,要跨域必须要有策略文件。考虑到 flashplayer升级到9.124之后,加强了安全性,之前的crossdomain.xml的写法发生了变化,以下就是该文件的完整写法:
    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
    <allow-access-from domain="*" />
    <allow-http-request-headers-from domain="*" headers="*"/>
    </cross-domain-policy>
    表示该服务允许任何外域来访问。
    关于crossdomain.xml的放置目录问题,有如下解决方案,可放置在:

    1) 如果这个目录是容器的根目录,可以通过以下的url访问crossdomain.xml: 

    http://localhost:8080/crossdomain.xml 。
    2) 如果crossdomain.xml不是放在根目录下,而是在某个webapp下面,在flex中就需要在初始化的时候应用 
    Security.loadPolicyFile("http:// localhost:8080/aaa /crossdomain.xml"); 

    其中aaa为webapp的名称
    这样,外部Flex访问该服务发布的WebService时,flashplayer首先找的就是crossdomain.xml文件,若安全机制设置为允许访问,则访问成功

  • 相关阅读:
    [BZOJ2729]排队
    [BZOJ2839]集合计数
    [BZOJ2111] Perm 排列计数
    Unet 项目部分代码学习
    数据增强代码
    论文阅读笔记五:U-Net: Convolutional Networks for Biomedical Image Segmentation(CVPR2015)
    CTPN项目部分代码学习
    论文阅读笔记四:CTPN: Detecting Text in Natural Image with Connectionist Text Proposal Network(ECCV2016)
    R2CNN项目部分代码学习
    VOC数据集生成代码使用说明
  • 原文地址:https://www.cnblogs.com/jiuyi/p/6068190.html
Copyright © 2011-2022 走看看