Flash CS3 文檔 ![]() | |||
學(xué)習(xí) Adobe Flash 中的 ActionScript 2.0 > 了解安全性 > 允許數(shù)據(jù)訪問(wèn)的服務(wù)器端策略文件 > 關(guān)于 XMLSocket 策略文件 | |||
![]() | |||
![]() | |||
![]() |
對(duì)于 XMLSocket 連接試圖而言,F(xiàn)lash Player 7 (7.0.14.0) 會(huì)在試圖連接的子域內(nèi)的 HTTP 服務(wù)器(端口 80)上查找 crossdomain.xml。Flash Player 7 (7.0.14.0) 以及所有早期版本將 XMLSocket 連接限制在端口 1024 和更高的端口。但是,在 Flash Player 7 (7.0.19.0) 和更高版本中,ActionScript 可以使用 System.security.loadPolicyFile
將策略文件的非默認(rèn)位置通知 Flash Player。XMLSocket 策略文件的任何自定義位置都必須仍在 XML 套接字服務(wù)器上。
在下面的示例中,F(xiàn)lash Player 從指定的 URL 檢索策略文件:
System.security.loadPolicyFile("http://www.adobe.com/folder/policy.xml");
由該位置的策略文件授予的所有權(quán)限均適用于服務(wù)器層次結(jié)構(gòu)中與該位置同層或低于該層的所有內(nèi)容。因此,如果您試圖加載下面的數(shù)據(jù),會(huì)發(fā)現(xiàn)只能加載某些位置的數(shù)據(jù):
myLoadVars.load("http://www.adobe.com/folder/vars.txt"); // 允許myLoadVars.load("http://www.adobe.com/folder/dir/vars2.txt"); // 允許myLoadVars.load("http://www.adobe.com/elsewhere/vars3.txt"); // 不允許
要解決此問(wèn)題,可以使用 loadPolicyFile
向一個(gè) SWF 文件加載多個(gè)策略文件。Flash Player 總是等所有策略文件下載完畢后,才會(huì)拒絕需要策略文件的請(qǐng)求。如果 SWF 中沒(méi)有其它授權(quán)的策略,則 Flash Player 將查詢 crossdomain.xml 的默認(rèn)位置。
特殊語(yǔ)法允許直接從 XMLSocket 服務(wù)器檢索策略文件:
System.security.loadPolicyFile("xmlsocket://adobe.com:414");
在本例中,F(xiàn)lash Player 試圖從指定的主機(jī)和端口檢索策略文件。如果策略文件不在默認(rèn)(根)目錄中,可以使用任意端口;否則只能使用端口 1024 和更高的端口(與早期版本的播放器相同)。建立與指定端口的連接后,F(xiàn)lash Player 將發(fā)送 <policy-file-request />
,以空字節(jié)結(jié)束。
可以配置 XML 套接字服務(wù)器,使其通過(guò)以下方式提供策略文件:
<policy-file-request />
。 服務(wù)器必須在關(guān)閉連接前發(fā)送一個(gè)空字節(jié)以終止策略文件。如果服務(wù)器不關(guān)閉連接,則 Flash Player 將在接收到結(jié)束空字節(jié)時(shí)關(guān)閉連接。
XML 套接字服務(wù)器提供的策略文件具有與其它策略文件相同的語(yǔ)法,只是它還必須指定授予訪問(wèn)權(quán)限的端口。允許的端口在 <allow-access-from>
標(biāo)簽中的 to-ports
屬性中指定。如果策略文件的端口低于 1024,則它可以給任何端口授予訪問(wèn)權(quán)限;如果策略文件來(lái)自端口 1024 或更高端口,則它只能給高于 1024 的其它端口授予訪問(wèn)權(quán)限。允許使用單端口號(hào)、端口范圍和通配符。下面的代碼是一個(gè) XMLSocket 策略文件的示例:
<<cross-domain-policy>
><<allow-access-from domain="*" to-ports="507" />
><<allow-access-from domain="*.adobe.com" to-ports="507,516" />
><<allow-access-from domain="*.helpexamples.com" to-ports="516-523" />
><<allow-access-from domain="www.adobe.com" to-ports="507,516-523" />
><<allow-access-from domain="www.helpexamples.com" to-ports="*" />
><</cross-domain-policy>
>
因?yàn)檫B接到 1024 以下的端口的能力是 Flash Player 7 (7.0.19.0) 和更高版本中的新功能,因此即使 SWF 文件連接到它自己的子域,也總是需要使用通過(guò) loadPolicyFile
加載的策略文件來(lái)進(jìn)行授權(quán)。
![]() | ||||
![]() | ![]() | ![]() | ||
![]() | ![]() | Popup | ![]() | ![]() |
![]() | ![]() | ![]() | ||
![]() |
聯(lián)系客服