Webzella WEBZELLA

Почему сайт не открывается на iPhone, но работает на Android: разбор реальной поломки с CDN и TLS 1.3

Сайт работает, сервер в порядке, логи чистые, но у половины клиентов на iPhone он либо не грузится, либо превращается в неработающую картинку. Разбираем реальный кейс из практики: при чём тут CDN, TLS 1.3 и белые списки РКН.

Почему сайт не открывается на iPhone, но работает на Android: разбор реальной поломки с CDN и TLS 1.3

История одной «странной» поломки

Сайт работает. Сервер в порядке. Логи чистые. Но у половины клиентов — особенно на iPhone — он либо не грузится, либо превращается в неработающую картинку. У кого-то всё открывается и на телефоне, и на компьютере. У кого-то — нет.

Знакомо? Сегодня разберём реальный кейс из практики веб-студии Webzella: почему так происходит и при чём тут CDN и TLS 1.3.

Что случилось

Мы сделали сайт для небольшой клиники. Стек — современный: FastAPI на бэкенде, React на фронтенде, статика и медиа раздаются через S3 CDN. Всё работало, пока в один день не начались жалобы: «Сайт не открывается на айфоне», «Кнопки не нажимаются», «Загружается как картинка, но не работает».

При этом на Android и на компьютерах всё было в порядке. У части пользователей на iPhone — тоже. Классическая «плавающая» проблема, которую сложно поймать.

Мы проверили кеширование, посмотрели логи ошибок — там было пусто. Сервер отвечал корректно. Код был в порядке. Тогда мы начали копать глубже.

Что такое CDN и почему он стал проблемой

CDN (Content Delivery Network) — это сеть географически распределённых серверов, которые кэшируют копии контента вашего сайта и отдают их пользователю из ближайшей к нему точки.

Зачем это нужно: чтобы пользователь из Владивостока не ждал картинку с сервера в Москве, а получил её с локального узла CDN. Это снижает нагрузку на основной сервер и ускоряет загрузку.

Какие бывают CDN:

  • «Большие дата-центры» (Big Data Center CDN). Несколько мощных дата-центров в ключевых точках. Хорошо для общего ускорения, но серверы всё ещё могут быть далеко от пользователя.
  • Высоко распределённые CDN (Highly Distributed). Серверы (точки присутствия) находятся максимально близко к пользователям, часто прямо внутри сетей интернет-провайдеров. Это даёт минимальную задержку, но дороже в обслуживании.

Почему это стало проблемой в РФ. Многие CDN используют общие IP-адреса для сотен клиентов. Если эти адреса не в «белых списках» РКН или попадают под фильтрацию, сайт может перестать открываться у части пользователей — даже если сам сайт технически исправен.

В нашем случае именно так и произошло: CDN-провайдер использовал адреса, которые не входили в белые списки. Сам сайт работал корректно, но трафик до него не доходил.

Что такое TLS 1.3 и почему именно он «ломает» iPhone

TLS (Transport Layer Security) — это протокол шифрования. Тот самый «замочек» в браузере (HTTPS), который защищает передачу данных — пароли, карты, переписку — от посторонних глаз.

Чем отличается TLS 1.3 от 1.2:

  • Скорость. TLS 1.3 устанавливает соединение быстрее — за один «круг» обмена данными, а не за два.
  • Безопасность. В 1.3 убрали старые и уязвимые алгоритмы шифрования, а также зашифровали больше служебной информации о самом соединении.

Почему из-за него не работает на iPhone. В новых версиях iOS (15–16+) Apple использует в TLS 1.3 постквантовый обмен ключами (гибридный). Из-за этого самое первое сообщение (ClientHello) при попытке установить соединение становится «непривычно большим».

Промежуточное оборудование (ТСПУ / DPI) на стороне мобильного оператора видит этот нестандартный пакет, не может его правильно распознать и просто обрывает соединение.

Результат: сертификат (даже Минцифры) тут не поможет, потому что соединение рвётся до того, как браузер и сервер успевают что-то проверить. Именно поэтому на Android или ПК (где стоят другие алгоритмы) всё работало, а на iPhone — нет.

Что делать: выводы

Не паниковать. Если сайт работает у одних и не работает у других на iPhone — это почти на 100% инфраструктурная блокировка (ТСПУ/DPI), а не ошибка в вашем коде.

Что можно сделать:

  • Если вы используете CDN, попросите поддержку принудительно ограничить версию TLS до 1.2 для вашего ресурса. TLS 1.2 — старый, стабильный протокол, который фильтры пропускают без проблем.
  • Если это собственный сервер (Nginx), можно временно отключить поддержку TLS 1.3 в конфигурации, оставив только 1.2, чтобы «переждать» период нестабильности.
  • Для будущих проектов: если нужна предсказуемая доступность в РФ, используйте CDN с возможностью выделенного IP в России или размещайте статику на собственном сервере с российским IP, который можно заявить в белый список.

Вместо заключения

Эта история — хороший пример того, что современный сайт — это не только код. Это инфраструктура: CDN, серверы, протоколы шифрования. И иногда проблема, которая выглядит как «баг в коде», на самом деле находится на уровне сети.

Если вы столкнулись с похожей ситуацией и не понимаете, почему сайт ведёт себя странно, — напишите нам в Webzella. Разберёмся, найдём причину и предложим решение. Без «трансформации» ради слова.

Соберите смету или напишите — обсудим задачу.

Услуги Webzella

Читайте также