Почему Flash требует файл crossdomain.xml, когда .swf и http target находятся на локальном хосте?

У меня есть небольшое клиентское/серверное тестовое приложение, в котором у меня есть приложение Flex, которое делает HTTP-запрос серверного приложения. Серверное приложение - это script, работающее на моем локальном компьютере, прослушивающее порт 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]

Ответ 1

Может случиться так, что, хотя у вас есть один и тот же хост и протокол между клиентской страницей и сервером, другой порт заставляет 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

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

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

В Flex 4.5 Mac /Пользователи/[YOUR_USER_NAME]/Library/Предпочтения/Macromedia/Flash Player/Журналы > tail -f policyfiles.txt