¿Por qué Flash exige un archivo crossdomain.xml cuando los destinos.swf y http están ambos en localhost?
flex actionscript-3 (2)
Tengo una pequeña aplicación de prueba de cliente / servidor donde tengo una aplicación Flex que realiza una solicitud HTTP de una aplicación de servidor. La aplicación de servidor es una secuencia de comandos que se ejecuta en mi máquina local, escuchando en el puerto 8001. El cliente es un swf que estoy ejecutando localmente, y usa mx.rpc.http.HTTPService
para hacer la solicitud de la página.
El servicio HTTPS se está configurando de la siguiente manera:
_HttpService = new HTTPService();
_HttpService.url = "http://localhost:8001";
_HttpService.contentType = "text/xml";
Cuando realizo una solicitud de página básica, mi aplicación de servidor primero recibe una "GET /crossdomain.xml HTTP/1.1"
, que está fallando ya que no tengo un archivo crossdomain.xml en su lugar. La razón por la que no tengo uno en su lugar es porque todo esto está sucediendo en mi máquina local (por ahora) y no debería necesitar uno (no creo).
Definitivamente tenía este código funcionando antes sin un crossdomain.xml cuando estaba usando Flex 3.x. Pensé que también lo estaba trabajando con Flex 4. Ahora estoy usando Flex 4.5. ¿Hay algún problema aquí, posiblemente debido a cambios en la política de seguridad?
Con todo esto sucediendo en localhost, ¿por qué Flash Player solicita un archivo crossdomain.xml?
En caso de que ayude, la falla específica que mi AsyncResponder está recuperando es:
[FaultEvent fault=[RPC Fault faultString="Security error accessing url" faultCode="Channel.Security.Error" faultDetail="Destination: DefaultHTTP"] messageId="F43DCBFF-E99A-99CC-57D8-535C13C7CD48" type="fault" bubbles=false cancelable=true eventPhase=2]
Puede ser que aunque tenga el mismo host y protocolo entre la página del cliente y el servidor, el puerto diferente haga que Flash falle la prueba del mismo origen y solicite crossdomain.xml para ver lo que está permitido hacer. ¿Asumo que la página que aloja su contenido Flash se está ejecutando en el puerto 80? Si ese es el caso, consulte el artículo de Wikipedia sobre la misma política de origen (http://en.wikipedia.org/wiki/Same_origin_policy) para obtener más detalles.
El crossdomain.xml no parece ser demasiado engorroso para las pruebas locales y está bastante bien documentado en help.adobe.com. Puede crear un crossdomain.xml en la raíz de su sitio web de esta manera, que permitirá todo el acceso:
<?xml version="1.0"?>
<!-- http://localhost/site/crossdomain.xml -->
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all"/>
<allow-access-from domain="*" to-ports="*"/>
</cross-domain-policy>
No utilizaría lo anterior para nada más que desarrollo local, ya que básicamente permite que cualquier dominio solicite contenido.
¡Espero que esto ayude!
Al usar policyfile.txt, descubrí que el archivo de política se había denegado porque el servidor no había especificado ningún tipo de contenido. Esto explica por qué era imposible encontrar algo bloggeado al respecto.
Espero que esto ayude a alguien.
En Flex 4.5 Mac / Users / [YOUR_USER_NAME] / Library / Preferences / Macromedia / Flash Player / Logs> tail -f policyfiles.txt