当 Flash 文档试图访问另一个域中的数据时,Flash Player 将自动试图从该域加载策略文件。如果试图访问数据的 Flash 文档所在的域包括在该策略文件中,则数据将自动成为可访问数据。
策略文件必须命名为 crossdomain.xml,并且可以驻留在服务器(该服务器提供具有其它 ActionScript 的数据)的根目录或其它目录中(请参阅关于自定义策略文件位置)。只有在通过 HTTP、HTTPS 或 FTP 进行通信的服务器上,策略文件才起作用。策略文件特定于它所驻留的服务器的端口和协议。
例如,位于
https://www.adobe.com:8080/crossdomain.xml的策略文件仅适用于在端口 8080 通过 HTTPS 对
www.adobe.com进行的数据加载调用。
此规则的例外情况是,使用 XMLSocket 对象连接到另一个域中的套接字服务器。如果是这种情况,运行于与套接字服务器所在的同一个域中端口 80 上的 HTTP 服务器必须提供该方法调用的策略文件。
XML 策略文件包含单个 <cross-domain-policy> 标签,该标签又包含零个或多个 <allow-access-from> 标签。每个 <allow-access-from> 标签包含一个属性 domain,该属性指定一个确切的 IP 地址、一个确切的域或一个通配符域(任何域)。通配符域由单个星号 (*)(匹配所有域和所有 IP 地址)或后接后缀的星号(只匹配那些以指定后缀结尾的域)表示。后缀必须以点开头。但是,带有后缀的通配符域可以匹配那些只包含后缀但不包含前导点的域。例如,adobe.com 可以看作是 *.adobe.com 的一部分。IP 域规范中不允许使用通配符。
如果您指定了一个 IP 地址,则将只向使用 IP 语法从该 IP 地址(例如
http://65.57.83.12/flashmovie.swf)加载的 SWF 文件授予访问权限,而不向使用域名语法加载的 SWF 文件授予访问权限。Flash Player 不执行 DNS 解析。
下面的示例显示一个策略文件,该策略文件允许从 adobe.com 上的 Flash 文档访问来自 adobe.com、
www.helpexamples.com、*.adobe.com 和 105.216.0.40 的 Flash 文档:
<<?xml version="1.0"?>>
<<!--
http://www.adobe.com/crossdomain.xml-->>
<<cross-domain-policy>>
<<allow-access-from domain="www.helpexamples.com" />>
<<allow-access-from domain="*.adobe.com" />>
<<allow-access-from domain="105.216.0.40" />>
<</cross-domain-policy>>
您也可以允许访问来自任何域的文档,如下面的示例所示:
<<?xml version="1.0"?>>
<<!--http://www.adobe.com/crossdomain.xml -->>
<<cross-domain-policy>>
<<allow-access-from domain="*" />>
<</cross-domain-policy>>
每个 <allow-access-from> 标签还具有可选的 secure 属性。secure 属性默认为 true。如果您的策略文件在 HTTPS 服务器上,并且要允许 HTTP 服务器上的 SWF 文件从 HTTPS 服务器加载数据,则可以将此属性设置为 false。
将 secure 属性设置为 false 可能会危及 HTTPS 提供的安全性。
如果您下载的 SWF 文件来自 HTTPS 服务器,而加载它的 SWF 文件位于 HTTP 服务器上,则您需要为 <allow-access-from> 标签添加 secure="false" 属性,如下面的代码所示:
<<allow-access-from domain="www.adobe.com" secure="false" />>
不包含任何 <allow-access-from> 标签的策略文件相当于服务器上没有策略。