Если вы разрабатываете веб-приложения и ссылаетесь на популярные JavaScript-библиотеки и шрифты, эта статья будет вам определенно полезна.


Проблема


Согласно Википедии, в Китае с 2014 года заблокированы все ресурсы Google, включая поиск, карты, Gmail, Google Play и Google API. Это означает, что ваши пользователи, находясь в Китае, не смогут загрузить те ресурсы с CDN, на которые вы ссылаетесь. Хорошо, если речь идет только о шрифтах, — в этом случае ваш сайт лишь будет выглядеть иначе, чем задумывал дизайнер. Гораздо хуже, когда речь идет о JavaScript, ведь с большой вероятностью ваш сайт просто сломается. Стоит отметить, что у "Великого Китайского Файрвола" есть одна интересная особенность: браузер будет ждать ответа от заблокированного ресурса до тех пор, пока не случится таймаут. Таким образом, если вы загружаете свой JavaScript синхронно, то в течение 30 секунд ваш пользователь будет смотреть на белую страницу, которая в итоге, конечно, загрузится, но едва ли окажется функциональной.


Update: для пользователей Крыма эта проблема тоже актуальна, так как часть сервисов Google там не работает.


История вопроса


"Великий Китайский Файрвол" — термин, широко используемый в средствах массовой информации, который определяет инициативу китайского правительства по регулированию интернета в материковом Китае. Это главный инструмент по внедрению цензуры в китайском обществе наравне с уголовными законами, запрещающими распространение определенных идей в сети. Действует с 2007 года.


Но у меня же нет клиентов в Китае


Большая ошибка так думать. В Китае постоянно проживает большое количество иностранцев, сюда регулярно приезжают люди в деловые поездки. Вероятно, среди них будут и ваши клиенты, которые, находясь заграницей, захотят воспользоваться вашим ресурсом, заказать товары или услуги для себя и своих близких. Игнорируя их, вы делаете большой подарок своим конкурентам, ведь сами побуждаете своих клиентов попробовать их услуги и, возможно, после этого вы их больше не увидите.


Как решить проблему


Очень просто: достаточно использовать любой другой CDN, убедившись в его доступности, либо перенести все ресурсы, которые вам нужны, на собственные сервера.


Если вы пользуетесь Google Analytics или социальными кнопками (Facebook и Twitter, к слову, тоже заблокированы), это почти никак не скажется на работе вашего сайта за исключением двух неприятных эффектов: социальные кнопки не появятся на вашей странице, а индикатор загрузки будет активным еще в течение примерно 30 секунд после того, как страница фактически загрузится.


VPN как решение проблемы


Широко распространено мнение, что VPN может решить все проблемы. Это не совсем правда:


  • использование VPN с целью обхода блокировок законодательно запрещено;
  • большинство людей будут испытывать сложности в процессе настройки VPN'а;
  • Китай постоянно ищет новые способы поиска и блокировок VPN-провайдеров. То, что работает сегодня, может перестать работать уже завтра;
  • благодаря "Великому Китайскому Файрволу" международный интернет в Китае временами работает очень медленно. VPN, как правило, делает ситуацию только хуже.

Заключение


Надеюсь, моя статья поможет сделать интернет чуточку лучше и доступнее для гостей и резидентов Китая, к которым с недавних пор отношусь и я.

Поделиться с друзьями
-->

Комментарии (32)


  1. bromzh
    10.10.2016 13:32
    +11

    Капитанская статья, да и заголовок желтоват. Почему именно гугл? Такие проблемы могут постичь любой сторонний CDN. А если ты подключаешь в своём проекте с большой клиентской базой библиотеки из сторонних CDN, то виноват не гугл, а только ты сам. Поднимай свою сеть, не надейся на чужих людей, которые тебе ничего не должны.


    К слову, недоступность CDN не самая большая проблема. Хуже, если её скомпрометируют, и вместо обычной библиотеки будет отдаваться её вредоносная копия. Такое уже было с jquery.


    1. Alukardd
      10.10.2016 13:36
      +1

      +1

      Google тут вообще не при делах, ни в общем случае, ни как пример для статьи. Особенно для заголовка.


    1. yury-dymov
      10.10.2016 13:37
      +1

      Сори за капитанский ответ, но потому, что гугл заблокирован в Китае, где проживает пятая часть населения планеты. Речь не о том, что CDN — это зло, а о том, что использование именно Google CDN портит ваш сайт для части вашей аудитории.


      Выбор CDN'а и само решение его использовать выходит за рамки статьи, потому что это не реклама, а желание сделать интернет доступнее и лучше


      1. bromzh
        10.10.2016 14:00

        Речь не о том, что CDN — это зло, а о том, что использование именно Google CDN портит ваш сайт для части вашей аудитории.

        Ну это понятно. Просто гугл и Китай — это один частный пример.
        В общем же можно было сказать так: в продакшене не подгружайте жизненно необходимых ресурсов (особенно тех, которые в head) на страницу из внешних источников, если не уверенны на 99% в их доступности. И используйте CDN по назначению, а не просто как внешнее хранилище крохотных css-стилей и js-библиотек.


        1. yury-dymov
          10.10.2016 14:06
          +1

          Я физически проживаю в Китаю и страдаю от того, что у того же StackOverflow загрузка страницы занимает 30 секунд без VPN. Так что для меня это пример ни разу не частный :)


          Я абсолютно с вами согласен по поводу head'а, и это один из вариантов решения проблемы.


          Статья не является "наездом" на Google — он тут ни при чем. Это призыв к разработчикам починить свои сайты, потому что многие коллеги даже не догадываются о существовании этой проблемы.


      1. mickvav
        11.10.2016 12:24
        +1

        Сделать geoip на уровне фаервола и dnat на порт, где слушает версия сайта с каким-нибудь китайским cdn-ом прокатит?


        1. yury-dymov
          11.10.2016 12:40

          Почти всегда да, если geoip достаточно точный. То ли Apple, то ли кто-то еще из "больших", кому китайский рынок важен, так делает


    1. zooks
      11.10.2016 14:11
      +1

      Согласен, абсолютно любой CDN может быть заблокирован госорганами конкретной страны. На этот случай всегда нужно иметь фолбеки.


    1. shuron
      12.10.2016 18:39

      Взвешивать надо…
      Кто-то может и электричество сам производит под ИТ.
      А кто-то все в лямды в облаках запихал и радуется… На клиента надо ориентироваться…


    1. Serator
      14.10.2016 15:59

      Проблема подмены решается сим: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity.


  1. ivan386
    10.10.2016 14:22
    +1

    Я как то Cloudflare пользовался бесплатно. Так в один момент их IP попадал под блокировку РКН а потом перестал работать поддомен. Я перенёс на них только поддомен. Видимо они решили что я их услугами не пользуюсь. Сайт остался без изображений и видео.


    1. yury-dymov
      10.10.2016 14:24

      Спасибо за дополнение. У меня с cloudflare пока проблем не было, но это определенно повод задуматься


    1. zooks
      11.10.2016 14:36
      +1

      Треть из заблокированных Роскомнадзором IP-адресов принадлежат Cloudflare.


  1. Aquahawk
    10.10.2016 14:58

    Всё просто. Владей своим сервисом сам. Точка.


    1. Ch4r1k
      10.10.2016 15:00

      Оркестрация рулит, имхо


  1. Mithgol
    10.10.2016 18:49
    +1

    Думаю, со временем эта проблема уйдёт в прошлое по мере того, как станет возрастать употребление P2P-распределённой файловой системы IPFS, которая одновременно сыграет роль CDN (причём такой CDN, в которой узлы доставки — сами пользователи) и роль хостинга статических (неизменных) файлов (например, библиотечных джаваскриптов определённой версии). Достаточно браузеру одного китайца преодолеть Стену для того, чтобы скрипт разошёлся по всей Поднебесной.


    1. yury-dymov
      10.10.2016 18:56

      О, это было бы очень здорово, мне даже сложно представить, сколько новых интересных проблем и решений, это нам принесет.


    1. ivan386
      10.10.2016 20:35

      Расскажите этим людям о Tger Tree Hash. Вместо Tiger хеша можно использовать тот же Sha256 будет Sha256 Tree Hash. И не надо изменять исходный файл для того чтоб не плодить тучи новых хешей которые можно использовать только внутри IPFS.


      Преимущества Tree Hash в том что файл можно делить на любые блоки (1024 байта * 2x) и он самопроверяемый.


      В таком случае если человек получит файл по ссылке не имея клиента IPFS сможет проверить что файл соответствует хешу в ней.


      Кстати формат блока я так и не увидел в документации.


    1. Rampages
      11.10.2016 18:39

      Мне например всегда было интересно, почему в браузеры не встроят самые популярные JS библиотеки, от этого их дистрибутив не намного вырастет.


      1. ivan386
        11.10.2016 21:34

        Встраивается и стандартизируется некоторый функционал из них. А так можно плагин сделать который будет перехватывать запрос на загрузку и отдавать из локального хранилища.


      1. bromzh
        12.10.2016 11:01

        Мало было и есть проблем с поддержкой стандартов HTML, CSS и JS среди разных браузеров разных версий, давайте добавим проблемы с поддержкой нестандартных библиотек! Плюс, тогда нужен будет некий менеджер пакетов для этих библиотек, встроенный в сам браузер, который тоже должен быть стандартным для всех браузеров. А уж с версионированием библиотек вообще веселуха начнётся.


  1. Pinsky
    11.10.2016 11:56

    Я так понимаю GitHub Pages в качестве CDN тоже лучше не использовать?


    1. yury-dymov
      11.10.2016 12:37

      Не знаю, но gist.github.com в Китае почему-то заблокирован


      1. Areso
        11.10.2016 13:15

        Потому что у них есть свой Александр Жаров.
        И таки да, Github Pages и gist.github.com используют разные IP адреса.
        Попробуйте проверить Github Pages на следующем IP 151.101.12.133 (один из адресов Github Pages).


        1. yury-dymov
          11.10.2016 13:29

          github pages не заблокированы — это точно


          Только gist


  1. Rumlin
    11.10.2016 12:59
    +1

    Но у меня же нет клиентов в Китае

    Кто катался в Крым, мог почувствовать себя в Китае — оттуда часть гугловских ресурсов недоступна. Потому, на некоторых сайтах проблемы. Например недоступно то, что работает на Google App Engine
    VPN как решение проблемы

    Бесплатный VPN в Opera пока сейчас работает быстро.


    1. yury-dymov
      11.10.2016 13:04

      Не знал про Крым — отличный аргумент, кстати.


      VPN сам по себе может быть и быстрым и медленным, зависит от того, как быстро вы до него доходите. Так как сервера VPN вне Китая, а межд. интернет бывает очень медленным временами, то это и создает основные проблемы.


      1. Rumlin
        11.10.2016 16:46
        +1

        Вот так это выглядит в самом тяжелом случае
        image


  1. POPSuL
    11.10.2016 15:33

    Хоть статья и капитанская, но спасибо! Я теперь задумался о смене Google CDN на что-то другое.


    Ну просто...

    … просто у нас крупнейший портал в Сахалинской области, и много "наших" людей ездят в Китай в отпуск или по работе, и при этом продолжают заходит на наш ресурс.
    А начали использовать тот же jQuery с Google CDN по одной просто причине — мы живём на острове, и с интернетами у нас полная беда, и для того, чтобы хоть как-то сэкономить ресурсы нашего канала "на внешку" (за пределы Сахалина) и для ускорения загрузки страниц у клиентов, мы для этой самой "внешки" отдаём ресурсы с различных CDN (Google, Yandex, CloudFront).


    1. Rampages
      11.10.2016 18:48

      Можно использовать Amazon Web Services (AWS), Microsoft Azure или Digital Ocean в качестве CDN или же хостинга для всего ресурса.


  1. FSA
    11.10.2016 17:24

    А у меня на работе сервисы гугла не работают. Не знаю какой «одарённый» админ это сделал. Так что зайти через OAuth2 никак не получается на сайты.


    1. Rampages
      11.10.2016 18:53

      Политика безопасности в некоторых организациях сильно «доставляет» ;)
      У нас почему-то на работе не работает market.yandex.ru, какой из сотен фильтров его блокирует нашему админу не понятно. Тот же youtube не открывается, а если кликнуть ссылку на youtube в поисковой выдаче гугла youtube открывается :) в общем че-то мне не нравится этот kerio winroute firewall