Почему Flash требует файл crossdomain.xml, когда цели .swf и http находятся на localhost? - PullRequest
10 голосов
/ 03 июня 2011

У меня есть небольшое клиент-тестовое приложение, где у меня есть приложение Flex, которое делает HTTP-запрос серверного приложения. Серверное приложение - это скрипт, работающий на моем локальном компьютере и прослушивающий порт 8001. Клиент - это SWF-файл, который я запускаю локально и использует mx.rpc.http.HTTPService для выполнения запроса страницы.

HTTPService настраивается согласно нижеуказанному:

_HttpService = new HTTPService();
_HttpService.url = "http://localhost:8001";
_HttpService.contentType = "text/xml";

Когда я выполняю запрос базовой страницы, мое серверное приложение сначала получает запрос "GET /crossdomain.xml HTTP/1.1", который не выполняется, поскольку у меня нет файла crossdomain.xml. Причина, по которой у меня его нет, заключается в том, что все это происходит на моей локальной машине (на данный момент), и мне это не нужно (я не думаю).

У меня определенно был этот код, работающий раньше без crossdomain.xml, когда я использовал Flex 3.x. Я думал, что у меня это работает и с Flex 4. Сейчас я использую Flex 4.5. Здесь есть проблема, возможно, из-за изменений в политике безопасности?

Когда все это происходит на localhost, почему проигрыватель Flash Player запрашивает файл crossdomain.xml?

Если это помогает, конкретная ошибка, которую возвращает мой AsyncResponder:

[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]

Ответы [ 2 ]

11 голосов
/ 03 июня 2011

Может случиться так, что, хотя у вас один и тот же хост и протокол между клиентской страницей и сервером, другой порт приводит к тому, что Flash не проходит тест того же источника и запрашивает crossdomain.xml, чтобы увидеть, что ему разрешено делать. Я предполагаю, что страница с вашим Flash-контентом работает на 80-м порту? Если это так, ознакомьтесь со статьей Википедии о той же политике происхождения (подробности http://en.wikipedia.org/wiki/Same_origin_policy).

Файл crossdomain.xml не выглядит слишком громоздким для локального тестирования и довольно хорошо документирован на help.adobe.com. Вы можете создать файл crossdomain.xml в корневом каталоге вашего веб-сайта следующим образом:

<?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>

Я бы не стал использовать вышесказанное для чего-либо, кроме локальной разработки, поскольку вы в основном разрешаете любому домену запрашивать контент.

Надеюсь, это поможет!

2 голосов
/ 23 июля 2011

Используя policyfile.txt, я выяснил, что в файле политики было отказано, поскольку сервер не указал Content-Type. Это объясняет, почему было невозможно найти что-либо в блоге об этом.

Надеюсь, это кому-нибудь поможет.

В Flex 4.5 Mac / Пользователи / [YOUR_USER_NAME] / Библиотека / Настройки / Macromedia / Flash Player / Журналы> tail -f policyfiles.txt

...