скрытый текст (кликните по нему, чтобы увидеть)
По-умолчанию Flash может иметь доступ только к тем ресурсам (скриптам, картинкам, видео и пр.) которые расположены с ним в одном домене. Приложение, которое находится на домене site1.com не сможет получить доступа к сайту site2.com. В большинстве случаев такой «песочницы» оказывается достаточно для нормального функционирования Falsh приложений.
Однако если есть необходимость получать данные с удаленных ресурсов, то нужно применять специальный файл, который регулирует уровень доступа с удаленных ресурсов, он называется crossdomain.xml. В нем указывается какие удаленные домены могут иметь доступ к тому домену, на котором находится файл crossdomain.xml.
Конкретный пример, когда необходим файл кроссдоменной безопасности — это чат-клиент на Flash подключенный к удаленному чат-серверу, например, Jabber (XMPP). Следуя политике безопасности Adobe Flash удаленный Jabber (или любой другой) сервер должен содержать файл crossdomain.xml, который бы позволял клиентским Flash приложениям к нему подключаться.
У меня используется XMPP сервер — Ejabberd 2.1.0. Так сложилось, что в нем нет встроенной поддержки crossdomain.xml, следовательно подключиться к нему из Flash-клиента не представляется возможным. Для Ejabberda разных версий есть специальные патчи применяемые с исходным кодам, которые могут решить данную проблему но у меня есть другое, более приемлемое решение.
Во-первых Jabber клиент должен работать в режиме BOSH (Bidirectional-streams Over Synchronous HTTP) на 5280 порту, библиотека XIFF 3.0 поддерживает этот режим с помощью класса XMPPBOSHConnection.
Во-вторых нужно «захостить» файл crossdomain.xml, чтобы он был доступен по адресу server.com:5280/crossdomain.xml (server.com — это домен на котором должен висеть ejabberd)
У Ejabberda есть модуль mod_http_fileserver, который позволяет организовать раздачу файлов. Этим и воспользуемся. Найдите в файле конфигурации ejabberd секцию начинающуюся с {5280, ejabberd_http и замените её этим:
{5280, ejabberd_http, [
web_admin,
{request_handlers, [{["xmpp-httpbind"],
mod_http_bind},
{, mod_http_fileserver}
]}
]}Ниже в файле конфигурации найдите строку, начинающуюся с {mod_http_fileserver (скорее всего будет закомментирована) и замените её на:
{mod_http_fileserver, [{docroot, "/opt/ejabberd/www"},
{content_types, [{".xml", "text/xml"}]},
{default_content_type, "text/xml"}
]},Создайте заранее директорию (например «/opt/ejabberd/www» как указано в конфиге) в котором будет размещаться файл crossdomain.xml, его содержание будет таким:
Свойство domain содержит имя домена которому будет разрешен доступ на этот сервер. Если хотите предоставить доступ со всех доменов на все порты, можно указать:
Все, настройка сервера закончена, можно проверить, доступен ли файл crossdomain.xml по нужному адресу из браузера. Нужно также не забыть указать клиенту помимо самого сервера с портом 5280 еще и путь BOSH, который с данным конфигом будет называться «/xmpp-httpbind/»