Flash +.РФ. Что делать?

    Собственно, проблема.
    Флэш-ролик не может обратиться к ресурсам на сервере, если размещен на сайте с международным именем (в частности, РФ). Замечено в браузере Firefox под Windows.
    Не очень приятный глюк, особенно с учетом распространенности данного браузера и данной платформы… Беглый взгляд по форумам не принес желаемых результатов, и пришлось взяться за исследования. Итак, подробности…

    Тесты


    Для начала — тестовая флэшка. Кода из нескольких строчек достаточно для нашего исследования:

    var xml = new XML;
    xml.onLoad = function() {
      _root.txt.text = this.toString();
    };
    xml.load(typeof(_root.link) === "undefined" ? "test.xml" : _root.link);
    

    Ну и, естественно, нужно не забыть текстовое поле с именем txt на первом кадре. Алгоритм простой: загружаем файл «test.xml» и отображаем его содержимое. Если указан параметр «link», то XML загружается из указанного адреса. Соответствующий «test.xml» сделаем самым простым:

    <?xml version="1.0" encoding="UTF-8"?>
    <test>Test</test>

    Файлы «test.swf» и «test.xml» выкладываем на сервер и начинаем тесты. Для тестов использовались два домена, один RU и один РФ, являющиеся синонимами. Ожидаемый результат — флэшка должна отображать содержимое XML-файла на любом домене. С тестом справились:
    • Opera 11 (Windows, Linux)
    • Google Chrome 9 (Windows, Linux)
    • Internet Explorer 8
    • Internet Explorer 6 (адрес punycode)
    Из распространенных браузеров тест провалился только в Firefox (Windows, Linux). Браузеры Lynx и W3M не участвовали, по понятным причинам.

    Исследование


    Что же не так? Попробуем протестировать загрузку ресурсов с сервера через Firebug.

    С доменом RU все хорошо:


    А вот с доменом РФ что-то не так:


    Собственно, видна проблема: Flash-плагин в сочетании с Firefox делают запрос на адрес, не закодировав доменное имя в punycode, что и вызывает проблему.

    Окей, попробуем по-другому. Сделаем так, чтобы данные загружались с домена RU. Добавим в адрес параметр «link», который мы предусмотрели специально для этого случая.
    Понятно, что у нас ничего не получится из-за проблем с кроссдоменными запросами. Но раз уж решили действовать последовательно — будем последовательными
    Что и требовалось доказать:


    Вооружившись документацией, создадим файл «crossdomain.xml» в корне сайта. Этот файл будет запрошен с домена RU (с того домена, где размещен XML-файл), и в нем должно быть указано какие флэш-ролики могут загружать загружать данные (точнее, на каких доменах опубликованы эти ролики).

    Вот только вопрос: какому домену разрешить запросы к нашему XML-файлу? Ведь, как мы увидели, с кириллическим именем домена есть определенные проблемы…

    Мы последовательно протестировали все возможные имена домена РФ:
    • Кириллица (.рф)
    • Punycode (.xn--p1ai)
    • URL-кодирование, нижний регистр (.%d1%80%d1%84)
    • URL-кодирование, верхний регистр (.%D1%80%D1%84)
    И… Все безуспешно. Все вариации на тему «crossdomain.xml» такого вида не приносили результатов:
    <?xml version="1.0" encoding="UTF-8"?>
    <cross-domain-policy>
    <allow-access-from domain="сайтнн.рф"/>
    <allow-access-from domain="*.сайтнн.рф"/>
    <allow-access-from domain="xn--80asmaqi.xn--p1ai"/>
    <allow-access-from domain="*.xn--80asmaqi.xn--p1ai"/>
    <allow-access-from domain="%D1%81%D0%B0%D0%B9%D1%82%D0%BD%D0%BD.%D1%80%D1%84"/>
    <allow-access-from domain="*.%D1%81%D0%B0%D0%B9%D1%82%D0%BD%D0%BD.%D1%80%D1%84"/>
    <allow-access-from domain="%d1%81%d0%b0%d0%b9%d1%82%d0%bd%d0%bd.%d1%80%d1%84"/>
    <allow-access-from domain="*.%d1%81%d0%b0%d0%b9%d1%82%d0%bd%d0%bd.%d1%80%d1%84"/>
    </cross-domain-policy>
    

    Выглядело это так:


    То есть, «crossdomain.xml» загружается, но флэш-плеер решает, что XML-данные с этого сайта загружать нельзя.

    Решение


    Остался последний вариант — указать в качестве домена "*". Таким образом, «crossdomain.xml» приобрел следующий вид:
    <?xml version="1.0" encoding="UTF-8"?>
    <cross-domain-policy>
    <allow-access-from domain="*"/>
    </cross-domain-policy>
    

    И — о чудо!


    Мораль


    Решение проблемы существует. Без издевательства. Решение, конечно, не идеальное, потому что доступ к данным через «crossdomain.xml» открывается сразу для всех сайтов. Впрочем, это не всегда проблема, потому что кому надо — те смогут обратиться к данным и другим способом, не обращая внимания на «crossdomain.xml».

    Относительно того, указывать ли имя хоста в параметрах (flashvars), или же его нужно включить в исходник флэш-ролика, вопрос остается открытым. Наверняка многие разработчики в целях защиты предпочитают «хардкодить» имена сайтов во флэшки, и наверняка многие предпочитают выносить эти адреса в параметры. Вполне допускаю правоту и тех, и других, в зависимости от проекта и задач. И предпочитаю на эту тему не спорить.

    Материалы:

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 75

      0
      Ну, кто первый закинет сообщение об этой проблеме в багзиллу Фонда Мозиллы?
      +22
      Чтобы не решать проблему просто не надо регистрировать этот никому не нужный прорекламированый домен
        +1
        Вы в багзилу посмотрите. Проблема с любым нелатинским доменом
          +14
          Любой не латинский домен это политическое решение, а не оптимальное.
            +15
            Нелатинские домены не нужны.
              0
              а что проще, неопытному юзеру набрать в адресной строке (причем чаще всего набирают адрес прямо в поиске), avtoservice или автосервис, имхо это распространённое мнение it'шников
            –6
            Ну а Медведеву со своим сайтом что делать, например?
              +13
              Ничего не делать. Использовать латинский и не страдать фигней, как ниже правильно написано.
            +24
            Самое очевидное решение, очевидное для любого вменяемого айтишника — не страдать фигнёй и не поддерживать маразм под названием «кириллические домены». Ещё можно подумать о целесообразности применения флеша, но это слишком холиварно.
              +2
              Я вас поддерживаю, но если уж домен зарегистрирован, нельзя игнорировать проблему. Кроме того мозг полезно немножко потренировать)
                +3
                Действительно, проблему нельзя игнорировать. Нужно признать свои ошибки, сделать выводы и перенести сайт на нормальный домен.
                  0
                  Мы не ищем легких путей) И некошерно для решения проблемы менять домен
                    –1
                    Если он не для пользователей, а для ваших игр создается, то да, некошерно.
                    • UFO just landed and posted this here
                    • UFO just landed and posted this here
                        +1
                        И при чем здесь такая аналогия?

                        Вот верная аналогия: сделали на сайте ярко-красный фон. И белый шрифт плохо на нем читается. Создается топик «меняем шрифт на черный — станет лучше!». Мой комментарий был бы «издеваетесь? фон измените». А ваш был бы о том, что настоящие программисты изобретут специальные очки для удобного чтения на красном фоне, а не пойдут легким путем!
                        • UFO just landed and posted this here
                            0
                            Смотря кем прекрасно читаются и уж явно не пишутся.

                            А, как я забыл, вы же «патриот». Нам с вами лучше не спорить, будет холивар.
                            • UFO just landed and posted this here
                                +1
                                Видимо, вы бы хотели, чтобы цифра 90% и не менялась.

                                И зачем «знать» язык, чтобы написать имя домена? А вот вообще не знать слов английского, чтобы вот полностью, это стыдно должно быть.
                                • UFO just landed and posted this here
                                    0
                                    в точку! :)
                                    0
                                    90%? Думаю, все 95%.

                                    Моя 15 летняя сестра не может визуально отличить английский от любого другого европейского языка, как и мама с бабушкой. А вы про знание слов/грамматики говорите.

                                    Хотя мне, как человеку, свободно владеющему английским, такая ситуация очень не приятна. Но что делать, изменить все равно ни чего нельзя.
                                    • UFO just landed and posted this here
                      +5
                      А это не вам решать. Есть сайт «президент.рф» — обязаны обеспечить доступ. Не можете — вон из профессии.
                        –2
                        Кто кому и что обязан?
                          +2
                          «Любой вменяемый айтишник», которого artifex учит жить в комментарии выше, есть существо подневольное и обязанное выполнять поставленную перед ним нанимателями задачу — а именно, поддерживать в рабочем состоянии ИТ-инфраструктуру.
                            +1
                            Если некий Медведев не может просмотреть на своём айфоне флеш-ролик с президент.рф, то ему не поможет даже самый квалифицированный айтишник ;)
                              0
                              а вот нихуя. все зависит от задачи.
                              0
                              да вы батенька, балван! :)
                                0
                                искренне прощу прощения, вырвалось
                          0
                          А если кодировать адрес в punycode в приложении, в вашем случае используя например Flash IDNA?
                            +2
                            .РФ детище маркетологов, только им и нужен.
                              +10
                              flash не нужен.
                              .РФ не нужен.

                              Flash +.РФ. Что делать?
                                –1
                                Не нужно быть таким категоричным. Я имею в виду первый пункт.
                                • UFO just landed and posted this here
                                    0
                                    Работать с flashvars крайне не удобно. Любой уважающий себя флешер сделает альтернативный xml конфиг для отладки.
                                    • UFO just landed and posted this here
                                        0
                                        Если там просто баннер, то да. Если что-то сложнее, то выделяется под это дело сервер который и конфигурирует флеш. Серверу просто передаются флешварсы и он возвращает в ответ стандартизированый xml. Просто на стороне флеша поддерживать 150 сайтов в актуальном состоянии это нереально.
                                        • UFO just landed and posted this here
                                            0
                                            Ну все от задачи зависит. Т.е. я лично сразу выношу всю кухню на сервер. Задача флеша предоставлять gui, а не разбираться где он сейчас работает и куда ему стучаться.
                                            • UFO just landed and posted this here
                                                0
                                                Это у вас какие-то армейские способы разработки. Если имеет смысл вынести определение параметров окружения на сервер, то это стоит делать. Флешеры обычно и так всегда в отстающих.
                                                • UFO just landed and posted this here
                                                    0
                                                    e4x просто прекрасен. Лучшего способа работы с xml я не встречал.
                                                    • UFO just landed and posted this here
                                                        0
                                                        А xml уже генерировать нельзя разве?
                                                        • UFO just landed and posted this here
                                  +5
                                  Нужно не симптомы болезни лечить, а саму болезнь.
                                  А если вы ещё не поняли, что ".РФ" ничем кроме болезни быть не может, значит вам об этом через годик расскажет статистика. Пожалейте по крайней мере свое личное время.
                                    0
                                    предлагаю устроить тотализатор, делаем ставки и встречаемся 16.02 2012, поглядим статистику? :)
                                      0
                                      А на что ставите вы? Какие у вас ощущения от.РФ?
                                        0
                                        мои ощущения? на мой взгляд рф был создан для бизнеса (для печатных сми и пр.) об этом тут тоже писали. Для редиректа (как написано в комменте ниже), для упрощения восприятия, для того — что часть населения это не it спецы и не продвинутая молодёжь, простые люди которые знают минимум о компьютерах (достаточно чтобы смотреть видео и читать новости). Можно говорить о необходимости развития и изучения английского языка — это всё хорошо, но это утопично. Мой диагноз? Будет жить! Сам владею десятком доменов в этой зоне, и по мне так оченьудобно.рф
                                    +13
                                    Клиентов приучаем использовать и сами используем домен в зоне .PФ просто для редиректа.

                                    Как правило всегда применяем такую схему редиректов:
                                    www.site.ru → (301) → site.ru
                                    сайт.рф → (301) → site.ru
                                    ввв.сайт.рф → (301) → site.ru

                                    В итоге всё шоколадно — и продвигать нужно всего один домен (site.ru), и есть кириллический домен для рекламы в газетах, например.

                                    Использовать .PФ как основной домен и тем более, как некоторые умудряются, сажать его в электронную почту ( майл@сайт.рф, салес@сайт.рф, суппорт@сайт.рф :-D ), по-моему удел глупцов.
                                      +3
                                      Из обсуждения я понял, что описанная в топике проблема возникает, возможно, из-за нелюбви Mozilla Foundation к доменной зоне РФ :-)
                                        0
                                        Mozilla Foundation любит «.рф» и поддерживает его в Firefox.

                                        Проблемы во флэшёвом плагине и в его взаимодействии с Файерфоксом. Тут надобно не только Фонду Мозиллы, но и Системам Адоуби помыслить об исправлении. Соборно.
                                          0
                                          мозилой пользуются только сумашедшие айтишники (из-за firebug'a)))):))))! человеки используют Chrome, Opera и IE :)))
                                        +2
                                        Что у вас со скриншотами?
                                          0
                                          Для того чтобы узнать что именно происходит с политикой,
                                          надо смотреть policyfiles.txt а не догадываться по картинкам.
                                            +2
                                            Хочу предупредить уважаемых читателей: ставить * в crossdomain можно *только* если на этом домене у вас хранятся статические файлы, и нет скриптов, личных кабинетов, кук, логина, пользовтаелей и прочего. Иначе через открытую CSRF у вас разломают весь сайт.
                                              +1
                                              Можно подробнее, пожалуйста?
                                              +1
                                              Если так охота иметь домен.рф, то просто ставьте на нём редирект на основной латинский домен.
                                                +3
                                                Оставьте домены рф для наших чиновников :) Пусть сами все их скупают, сами себе же их продают и пусть вообще продолжают жить в своем мирке.
                                                  +2
                                                  Если Вы так основательно подошли к такой никчемной проблеме, тогда почему Вы так же не подошли к проблеме кириллических доменов еще в зародыше? Зачем себе же создавать траблы на свою жопу?
                                                  Решение может быть только одним в этом случае — редирект. И флеш работает, и админы не в панике, и люди не страдают.
                                                    +2
                                                    Flash +.РФ. Что делать? -> Поставить редирект и не мучиться.
                                                      –1
                                                      Насколько я понимаю, есть два зеркала сайта — в.рф и .ru. Загоните флеш в iframe и грузите его всегда с .ru.
                                                        0
                                                        Речь о сложных случаях, когда редирект не подойдёт…
                                                        0
                                                        Наверняка многие разработчики в целях защиты предпочитают «хардкодить» имена сайтов во флэшки, и наверняка многие предпочитают выносить эти адреса в параметры.

                                                        тупо ломается любым флеш-дизассемблером.
                                                          0
                                                          для любителей выпендриться и зарегить домен в зоне рф проще всего просто настроить редирект с этого домена на латинский и не орошать никому мозг.
                                                            0
                                                            Это для любителей выпендриться и зарегистрировать домен только в зоне.рф
                                                            0
                                                            что делать — бойкотировать этот бред с китайскоарабским интернетом. чем я и занимаюсь
                                                              0
                                                              Спасибо! Проблема была насущной для одного проекта, пока был редирект на .ru
                                                                0
                                                                Пожалуйста, для этого и написал :-)
                                                                0
                                                                для кириллических GET-запросов (например поиск):

                                                                function decode_utf8( s:String ):String {
                                                                return decodeURIComponent( escape( s ) );
                                                                }

                                                                function encode_utf8( s:String ):String {
                                                                return unescape( encodeURIComponent( s ) );
                                                                }

                                                                Может и в этом случае поможет.

                                                                Only users with full accounts can post comments. Log in, please.