기본적으로 런타임에서는 포트 843에서 제공되는 소켓 정책 파일을 찾습니다. URL 정책 파일과 마찬가지로 이 파일을
마스터 정책 파일
이라고 합니다.
정책 파일이 처음으로 Flash Player 6에 도입되었을 때는 소켓 정책 파일이 지원되지 않았습니다. 따라서 소켓 서버에 대한 연결은 소켓 서버와 동일한 호스트의 포트 80에 있는 HTTP 서버의 기본 위치에 있는 정책 파일에 의해 허가되었습니다. Flash Player 9는 이 기능을 계속 지원하지만 Flash Player 10에서는 지원되지 않습니다. Flash Player 10에서는 소켓 정책 파일만 소켓 연결에 권한을 부여할 수 있습니다.
URL 정책 파일과 마찬가지로 소켓 정책 파일은 정책 파일을 서비스할 수 있는 포트를 지정하는 메타 정책 문을 지원합니다. 그러나 소켓 정책 파일에 대한 기본 메타 정책은 "master-only" 대신 "all"입니다. 즉, 마스터 정책 파일에서 보다 제한적인 설정을 지정하지 않는 한 Flash Player는 호스트의 모든 소켓에서 소켓 정책 파일을 제공할 수 있다고 가정합니다.
연결하는 소켓이 SWF 파일과 동일한 도메인에 있는 경우에도 소켓 및 XML 소켓 연결에 대한 액세스는 기본적으로 사용되지 않습니다. 다음 위치 중 하나에서 소켓 정책 파일을 제공하여 소켓 수준 액세스를 허용할 수 있습니다.
-
포트 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>
포트 843이나 기본 소켓 연결과 동일한 포트에서 소켓 정책 파일을 검색하려면
Socket.connect()
또는
XMLSocket.connect()
메서드를 호출합니다. Flash Player는 먼저 포트 843에서 마스터 정책 파일을 확인합니다. 파일이 있으면 대상 포트의 소켓 정책 파일을 차단하는 메타 정책 문이 파일에 포함되어 있는지 확인합니다. 액세스가 차단되지 않은 경우 Flash Player는 먼저 마스터 정책 파일에서 적합한
allow-access-from
문을 찾습니다. 파일이 없으면 Flash Player는 주 소켓 연결과 동일한 포트에서 소켓 정책 파일을 찾습니다.
다른 위치에서 소켓 정책 파일을 검색하려면 먼저 다음과 같이 특수
"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에서 기본 연결을 설정하기 위해 다시 연결하기 전에 정책 파일 연결을 닫습니다.