플래시에서 소켓 연결 태스트중 권한 없음으로 인한 보안 샌드 박스 문제가 발생 하였습니다.
Error #2044: 처리되지 않은 securityError입니다. text=Error #2048: 보안 샌드박스 문제가 발생했습니다.
이 오류는 크로스도메인 파일 정의 되지 않는 경우 일어나는 일이라 별생각없이 플래시가 있는 IIS의 루트에 크로스 도메인 파일을 추가하였습니다.
하지만 계속 같은 오류가 나는 겁니다 ㅡ,.ㅡ;;;
그래서 실버라이트 소켓 프로그램들이 돌고있는 웹서버에 올려놓고 돌려보았습니다.
같은 증상이 반복되는군요....
이것 때문에 이틀을 삽질하던중 다시 보던 액션스크립트 도움말을 보다가 발견한 내용.
허....헐?
이 문제 때문에 이 도움말을 10번 가까이 읽었는데 이내용을 처음 보다니-_-;;;;;;
한마디로
"같은 프로토콜 끼리만 크로스도메인내용을 공유 할수 있다."
입니다.
검색을 해보니 액션스크립트3(플래시 플레이어 10이상)부터 생긴 규칙이라고 합니다;;
그러니 소켓통신을 하려면 소켓통신하는 서버나 다른 소켓서버에서 권한 관련 xml내용을 보내 주어야 한다는 것입니다.
문서대로 소켓통신을 하고 싶으면 크로스도메인내용을 소켓서버가 전달을 해야 합니다.
소켓서버를 하나 더 만들던 기존서버에 추가하던 하시면 됩니다.
플래시의 소켓 접속 행동 패턴은 이렇습니다.
1)크로스 도메인 권한내용이 있나?
2)없으면 내가 접속하려는 소켓서버에 "<policy-file-request/>\0"라고 요청한다.
3)서버에서 크로스 도메인 내용을 준다.
<?xml version=""1.0"" ?> <!DOCTYPE cross-domain-policy SYSTEM ""/xml/dtds/cross-domain-policy.dtd""> <cross-domain-policy> <allow-access-from domain=""*"" to-ports=""*""/> </cross-domain-policy>
4)서버에서 커낵트를 끊는다.(중요.)
5)서비스를 할 서버로 연결한다.
여기서 4)가 중요한데 서버에서 크로스도메인 권한을 보낸후 디스커낵트를 하지 않으면 권한을 제대로 읽지 못합니다.
(몇가지 더 테스트해보고 업데이트 하겠습니다.)
확실이 브라우저 플러그인들은 권한 제한이 강해지고 있습니다-_-;;;
엑티브X의 악몽을 생각하면 당연한 것이긴 하죠,.
하지만 웹만큼 사용자접근성이 좋은 것도 없는데 이런일 일어날때마다 개발자만 힘든거라는게 가슴아픈 현실이죠 ㅎㅎㅎㅎㅎ
나의 2일을 돌려주오~
p.s. 난 플래시랑 상관없는데 어쩌다 같이 삽질을 한거지? ㅋㅋㅋㅋㅋ