執行階段預設會尋找從連接埠 843 提供的通訊端原則檔。就像 URL 原則檔一樣,這個檔案稱為「主原則檔」。
最初在 Flash Player 6 加入原則檔時,並沒有通訊端原則檔的支援。至通訊端伺服器的連線是由原則檔進行授權,該原則檔位於與通訊端伺服器相同主機之埠號 80 上 HTTP 伺服器所含原則檔的預設位置中。Flash Player 9 仍然支援這項功能,但 Flash Player 10 不支援。在 Flash Player 10 中,只有通訊端原則檔可以授權通訊端連線。
通訊端原則檔與 URL 原則檔相同,都支援中繼原則陳述式,指定可提供原則檔的連接埠。但是,通訊端原則檔的預設中繼原則是「全部」而不是「僅主檔」。也就是說,除非主原則檔指定限制更多的設定,否則,Flash Player 會假設主機上的任何通訊端都可以提供通訊端原則檔。
根據預設,會停用通訊端和 XML 通訊端連線,即使您連線的通訊端是與 SWF 檔位於相同網域,也一樣停用。您可以透過從下列任何位置提供通訊端原則檔,准許通訊端層級存取:
-
連接埠 843 (主原則檔的位置)
-
與主通訊端連線相同的連接埠
-
與主通訊端連線不同的連接埠
根據預設,Flash Player 會在連接埠 843 上以及與主通訊端連線相同的連接埠上尋找通訊端原則檔。如果您要從不同的連接埠提供通訊端原則檔,SWF 檔必須呼叫
Security.loadPolicyFile()
。
通訊端原則檔與 URL 原則檔具有相同的語法,不同的是,通訊端原則檔也必須指定所允許存取的埠號。當原則檔來自低於 1024 的埠號時,就可以授與存取權限給任何埠號;當原則檔來自 1024 或更高的埠號時,則只能授與存取權限給 1024 或更高的埠號。允許存取的連接埠是在
<allow-access-from>
標籤的
to-ports
特質中設定的。單一埠號、埠號範圍以及萬用字元也都是所接受的值。
以下是通訊端原則檔的範例:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<!-- Policy file for xmlsocket://socks.mysite.com -->
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.example.com" to-ports="507,516" />
<allow-access-from domain="*.example.org" to-ports="516-523" />
<allow-access-from domain="adobe.com" to-ports="507,516-523" />
<allow-access-from domain="192.0.34.166" to-ports="*" />
</cross-domain-policy>
若要從連接埠或與主通訊端連線相同的連接埠上擷取通訊端原則檔,請呼叫
Socket.connect()
或
XMLSocket.connect()
方法。Flash Player 會先在連接埠 843 上檢查是否有主原則檔。如果找到原則檔,會檢查檔案中是否包含中繼原則陳述式,禁止目標連接埠上的通訊端原則檔。如果未禁止存取,Flash Player 會先在主原則檔中尋找適當的
allow-access-from
陳述式。如果找不到檔案,就會到與主通訊端連線相同的連接埠上尋找通訊端原則檔。
若要在不同位置上擷取通訊端原則檔,請先以特殊的
"xmlsocket"
語法呼叫
Security.loadPolicyFile()
方法,如下所示:
Security.loadPolicyFile("xmlsocket://server.com:2525");
先呼叫
Security.loadPolicyFile()
方法,再呼叫
Socket.connect()
或
XMLSocket.connect()
方法,然後 Flash Player 會等到已完成您的原則檔要求之後,才決定是否允許您的主連線。但是,如果主原則檔指定目標位置不可提供原則檔,則呼叫
loadPolicyFile()
沒有作用,即使該位置上有原則檔也無效。
如果實作通訊端伺服器,而且必須提供通訊端原則檔,請決定在提供原則檔時,您是要使用接受主連線的連接埠,或是要使用不同的連接埠。不論何種情況,您的伺服器都必須先等候來自您用戶端的傳輸,再傳送回應。
當 Flash Player 要求原則檔時,連線一建立,就一定會立即傳輸下列字串:
<policy-file-request/>
伺服器接收到此字串以後,就可以傳輸原則檔。來自 Flash Player 的要求永遠都會以 null 位元組結束,而來自伺服器的回應也必須都以 null 位元組結束。
不要期望在原則檔和主連線上重新使用相同的連線,您應該在傳輸原則檔之後關閉連線。若不關閉連線,Flash Player 會先關閉原則檔連線,再重新連線設置主連線。