Если вы разрабатываете веб-приложения и ссылаетесь на популярные 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)
ivan386
10.10.2016 14:22+1Я как то Cloudflare пользовался бесплатно. Так в один момент их IP попадал под блокировку РКН а потом перестал работать поддомен. Я перенёс на них только поддомен. Видимо они решили что я их услугами не пользуюсь. Сайт остался без изображений и видео.
yury-dymov
10.10.2016 14:24Спасибо за дополнение. У меня с cloudflare пока проблем не было, но это определенно повод задуматься
Mithgol
10.10.2016 18:49+1Думаю, со временем эта проблема уйдёт в прошлое по мере того, как станет возрастать употребление
P2P-распределённой файловой системы IPFS, которая одновременно сыграет роль CDN (причём такой CDN, в которой узлы доставки — сами пользователи) и роль хостинга статических (неизменных) файлов (например, библиотечных джаваскриптов определённой версии). Достаточно браузеру одного китайца преодолеть Стену для того, чтобы скрипт разошёлся по всей Поднебесной.yury-dymov
10.10.2016 18:56О, это было бы очень здорово, мне даже сложно представить, сколько новых интересных проблем и решений, это нам принесет.
ivan386
10.10.2016 20:35Расскажите этим людям о Tger Tree Hash. Вместо Tiger хеша можно использовать тот же Sha256 будет Sha256 Tree Hash. И не надо изменять исходный файл для того чтоб не плодить тучи новых хешей которые можно использовать только внутри IPFS.
Преимущества Tree Hash в том что файл можно делить на любые блоки (1024 байта * 2x) и он самопроверяемый.
В таком случае если человек получит файл по ссылке не имея клиента IPFS сможет проверить что файл соответствует хешу в ней.
Кстати формат блока я так и не увидел в документации.
Rampages
11.10.2016 18:39Мне например всегда было интересно, почему в браузеры не встроят самые популярные JS библиотеки, от этого их дистрибутив не намного вырастет.
ivan386
11.10.2016 21:34Встраивается и стандартизируется некоторый функционал из них. А так можно плагин сделать который будет перехватывать запрос на загрузку и отдавать из локального хранилища.
bromzh
12.10.2016 11:01Мало было и есть проблем с поддержкой стандартов HTML, CSS и JS среди разных браузеров разных версий, давайте добавим проблемы с поддержкой нестандартных библиотек! Плюс, тогда нужен будет некий менеджер пакетов для этих библиотек, встроенный в сам браузер, который тоже должен быть стандартным для всех браузеров. А уж с версионированием библиотек вообще веселуха начнётся.
Pinsky
11.10.2016 11:56Я так понимаю GitHub Pages в качестве CDN тоже лучше не использовать?
yury-dymov
11.10.2016 12:37Не знаю, но gist.github.com в Китае почему-то заблокирован
Areso
11.10.2016 13:15Потому что у них есть свой Александр Жаров.
И таки да, Github Pages и gist.github.com используют разные IP адреса.
Попробуйте проверить Github Pages на следующем IP 151.101.12.133 (один из адресов Github Pages).
Rumlin
11.10.2016 12:59+1Но у меня же нет клиентов в Китае
Кто катался в Крым, мог почувствовать себя в Китае — оттуда часть гугловских ресурсов недоступна. Потому, на некоторых сайтах проблемы. Например недоступно то, что работает на Google App Engine
VPN как решение проблемы
Бесплатный VPN в Opera пока сейчас работает быстро.yury-dymov
11.10.2016 13:04Не знал про Крым — отличный аргумент, кстати.
VPN сам по себе может быть и быстрым и медленным, зависит от того, как быстро вы до него доходите. Так как сервера VPN вне Китая, а межд. интернет бывает очень медленным временами, то это и создает основные проблемы.
POPSuL
11.10.2016 15:33Хоть статья и капитанская, но спасибо! Я теперь задумался о смене Google CDN на что-то другое.
Ну просто...… просто у нас крупнейший портал в Сахалинской области, и много "наших" людей ездят в Китай в отпуск или по работе, и при этом продолжают заходит на наш ресурс.
А начали использовать тот же jQuery с Google CDN по одной просто причине — мы живём на острове, и с интернетами у нас полная беда, и для того, чтобы хоть как-то сэкономить ресурсы нашего канала "на внешку" (за пределы Сахалина) и для ускорения загрузки страниц у клиентов, мы для этой самой "внешки" отдаём ресурсы с различных CDN (Google, Yandex, CloudFront).Rampages
11.10.2016 18:48Можно использовать Amazon Web Services (AWS), Microsoft Azure или Digital Ocean в качестве CDN или же хостинга для всего ресурса.
FSA
11.10.2016 17:24А у меня на работе сервисы гугла не работают. Не знаю какой «одарённый» админ это сделал. Так что зайти через OAuth2 никак не получается на сайты.
Rampages
11.10.2016 18:53Политика безопасности в некоторых организациях сильно «доставляет» ;)
У нас почему-то на работе не работает market.yandex.ru, какой из сотен фильтров его блокирует нашему админу не понятно. Тот же youtube не открывается, а если кликнуть ссылку на youtube в поисковой выдаче гугла youtube открывается :) в общем че-то мне не нравится этот kerio winroute firewall
bromzh
Капитанская статья, да и заголовок желтоват. Почему именно гугл? Такие проблемы могут постичь любой сторонний CDN. А если ты подключаешь в своём проекте с большой клиентской базой библиотеки из сторонних CDN, то виноват не гугл, а только ты сам. Поднимай свою сеть, не надейся на чужих людей, которые тебе ничего не должны.
К слову, недоступность CDN не самая большая проблема. Хуже, если её скомпрометируют, и вместо обычной библиотеки будет отдаваться её вредоносная копия. Такое уже было с jquery.
Alukardd
+1
Google тут вообще не при делах, ни в общем случае, ни как пример для статьи. Особенно для заголовка.
yury-dymov
Сори за капитанский ответ, но потому, что гугл заблокирован в Китае, где проживает пятая часть населения планеты. Речь не о том, что CDN — это зло, а о том, что использование именно Google CDN портит ваш сайт для части вашей аудитории.
Выбор CDN'а и само решение его использовать выходит за рамки статьи, потому что это не реклама, а желание сделать интернет доступнее и лучше
bromzh
Ну это понятно. Просто гугл и Китай — это один частный пример.
В общем же можно было сказать так: в продакшене не подгружайте жизненно необходимых ресурсов (особенно тех, которые в head) на страницу из внешних источников, если не уверенны на 99% в их доступности. И используйте CDN по назначению, а не просто как внешнее хранилище крохотных css-стилей и js-библиотек.
yury-dymov
Я физически проживаю в Китаю и страдаю от того, что у того же StackOverflow загрузка страницы занимает 30 секунд без VPN. Так что для меня это пример ни разу не частный :)
Я абсолютно с вами согласен по поводу head'а, и это один из вариантов решения проблемы.
Статья не является "наездом" на Google — он тут ни при чем. Это призыв к разработчикам починить свои сайты, потому что многие коллеги даже не догадываются о существовании этой проблемы.
mickvav
Сделать geoip на уровне фаервола и dnat на порт, где слушает версия сайта с каким-нибудь китайским cdn-ом прокатит?
yury-dymov
Почти всегда да, если geoip достаточно точный. То ли Apple, то ли кто-то еще из "больших", кому китайский рынок важен, так делает
zooks
Согласен, абсолютно любой CDN может быть заблокирован госорганами конкретной страны. На этот случай всегда нужно иметь фолбеки.
shuron
Взвешивать надо…
Кто-то может и электричество сам производит под ИТ.
А кто-то все в лямды в облаках запихал и радуется… На клиента надо ориентироваться…
Serator
Проблема подмены решается сим: https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity.