Ошибка net::ERR_CLEARTEXT_NOT_PERMITTED: причины и способы решения

Ошибка net::ERR_CLEARTEXT_NOT_PERMITTED появляется на Android-смартфоне в тот момент, когда приложение или встроенный браузер WebView пытается открыть страницу по незашифрованному протоколу HTTP, а система блокирует такое соединение. Начиная с Android 9 (Pie), операционная система по умолчанию запрещает передачу данных открытым текстом — это осознанная мера безопасности Google, а не сбой устройства.

Столкнуться с этой ошибкой можно в двух ролях: как обычный пользователь, у которого перестал открываться сайт или функция внутри приложения, и как разработчик, чьё приложение выдаёт пустой экран WebView с этим кодом. Решения в этих случаях принципиально разные, и ниже мы разберём оба сценария подробно.

Что означает ошибка и почему она возникает

Расшифровка кода проста: cleartext — это «открытый текст», то есть данные, передаваемые без шифрования. Когда приложение запрашивает адрес вида http://example.com, Android проверяет конфигурацию сетевой безопасности. Если приложение не получило явного разрешения на незашифрованный трафик, система обрывает соединение и возвращает ERR_CLEARTEXT_NOT_PERMITTED.

Причина кроется в политике безопасности: HTTP-трафик передаётся в открытом виде, и любой узел на пути (роутер, провайдер, точка доступа Wi-Fi) теоретически может прочитать или подменить данные. Поэтому Google изменила поведение по умолчанию: приложения, собранные для Android 9 и новее, обязаны работать по HTTPS, если разработчик явно не разрешил обратное.

Типичные ситуации, в которых всплывает ошибка:

  • 🔓 Внутри приложения открывается страница по адресу http:// вместо https://
  • 🏠 Приложение обращается к локальному устройству в домашней сети (роутер, IP-камера, сетевое хранилище) без сертификата
  • 🛠️ Разработчик тестирует приложение на локальном сервере без SSL
  • 🌐 Сайт, который открывает приложение, не поддерживает HTTPS или его сертификат настроен некорректно

Как понять, кто виноват: пользователь, сайт или приложение

Прежде чем что-то менять, полезно определить источник проблемы. Откройте тот же адрес в обычном браузере (например, Chrome) на этом же устройстве. Если страница открывается в браузере, но не работает внутри конкретного приложения — ограничение задано в самом приложении, и исправить его может только разработчик.

Если адрес начинается с http://, попробуйте вручную заменить его на https://. Многие сайты давно поддерживают защищённое соединение, а ошибка возникает лишь потому, что в приложение «зашита» старая ссылка без шифрования.

Отдельный случай — локальные адреса вида 192.168.x.x или 10.x.x.x. Домашние устройства (роутеры, камеры, медиасерверы) часто работают только по HTTP, и получить для них доверенный сертификат сложно. Здесь ошибка ожидаема, и обходить её нужно аккуратно — об этом ниже.

📊 Где вы столкнулись с ошибкой ERR_CLEARTEXT_NOT_PERMITTED?
В стороннем приложении на телефоне
В собственном приложении (я разработчик)
При доступе к роутеру или камере в локальной сети
В браузере при открытии сайта

Что может сделать обычный пользователь

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

Во-первых, проверьте наличие обновлений приложения в Google Play: возможно, разработчик уже перевёл свои серверы на HTTPS, и свежая версия работает корректно. Во-вторых, если ошибка возникает при открытии ссылки, скопируйте адрес и откройте его в браузере, заменив http:// на https://.

  • 🔄 Обновите приложение до последней версии через магазин приложений
  • 🔗 Попробуйте открыть тот же ресурс через браузер с префиксом https://
  • 📶 Проверьте, не блокирует ли соединение текущая сеть: переключитесь с Wi-Fi на мобильный интернет
  • 🧹 Очистите кэш проблемного приложения в настройках телефона
⚠️ Внимание: не устанавливайте сторонние «фиксеры» и модифицированные версии приложений, обещающие отключить проверку cleartext-трафика. Такие сборки снимают защиту от перехвата данных и нередко содержат вредоносный код.

Если ничего не помогло, единственный корректный путь — сообщить о проблеме разработчику приложения через страницу в магазине приложений, указав текст ошибки и модель устройства.

Решение для разработчиков: быстрый способ

Если ошибка возникает в вашем собственном приложении, самый простой способ вернуть поддержку HTTP — добавить атрибут в файл AndroidManifest.xml внутри тега application:

<application

android:usesCleartextTraffic="true"

... >

После этого приложению снова разрешается работать с незашифрованными адресами, и WebView перестанет показывать ошибку. Способ подходит для быстрой проверки, например при отладке на локальном сервере.

☑️ Проверка перед публикацией приложения

Выполнено: 0 / 4

Однако глобальное разрешение — компромисс: оно открывает HTTP-доступ для всех адресов сразу, включая потенциально небезопасные. Для релизных сборок правильнее использовать точечную настройку.

Правильное решение: Network Security Config

Рекомендуемый Google подход — файл конфигурации сетевой безопасности, который разрешает открытый трафик только для конкретных доменов. Создайте файл res/xml/network_security_config.xml:

<network-security-config>

<domain-config cleartextTrafficPermitted="true">

<domain includeSubdomains="true">192.168.1.1</domain>

<domain includeSubdomains="true">your-local-server.local</domain>

</domain-config>

</network-security-config>

Затем подключите конфигурацию в манифесте:

<application

android:networkSecurityConfig="@xml/network_security_config"

... >

Такой вариант сохраняет защиту для всего интернет-трафика, разрешая HTTP только там, где это действительно нужно — например, для устройств в локальной сети. Глобальное разрешение cleartext-трафика в релизной сборке снижает защиту всех пользователей приложения, поэтому его стоит избегать.

Почему нельзя просто выпустить сертификат для локального устройства

Доверенные сертификаты выдаются на доменные имена, а не на частные IP-адреса. Для адресов вида 192.168.x.x получить публично доверенный сертификат невозможно, поэтому разработчикам приходится либо разрешать cleartext точечно, либо использовать самоподписанные сертификаты с собственным хранилищем доверия внутри приложения.

Сравнение способов решения

Способ Кому подходит Безопасность Сложность
Переход сайта на HTTPS Владельцы серверов и сайтов Максимальная Средняя
usesCleartextTraffic="true" Разработчики (отладка) Низкая Минимальная
Network Security Config Разработчики (релиз) Высокая Средняя
Открытие ссылки в браузере Пользователи Зависит от сайта Минимальная

Когда ошибка появляется в браузере

В обычном Chrome на Android код net::ERR_CLEARTEXT_NOT_PERMITTED встречается редко — чаще браузер показывает собственные предупреждения о небезопасном соединении. Если вы всё же видите эту ошибку именно в браузере, возможная причина — переход по HTTP-ссылке из приложения, которое само блокирует открытый трафик, либо корпоративные политики безопасности на устройстве.

Проверьте, открывается ли сайт по адресу с https://. Если ресурс в принципе не поддерживает шифрование, решение остаётся за его владельцем — со стороны посетителя здесь ничего настроить нельзя, и вводить на такой странице пароли или платёжные данные небезопасно.

⚠️ Внимание: не отключайте защиту и не вводите логины, пароли или данные банковских карт на страницах, открытых по HTTP. Даже в домашней сети такой трафик может быть перехвачен другими устройствами.

Часто задаваемые вопросы

Опасна ли ошибка ERR_CLEARTEXT_NOT_PERMITTED для телефона?

Нет. Это не сбой и не вирус, а штатная реакция системы безопасности Android на попытку открыть незашифрованное соединение. Само появление ошибки никак не вредит устройству.

Можно ли отключить блокировку cleartext-трафика в настройках Android?

Штатной системной настройки для этого нет. Запрет задаётся на уровне каждого приложения его разработчиком, поэтому пользователь не может отключить его глобально без изменения самого приложения.

Почему приложение работало раньше, а теперь показывает эту ошибку?

Возможные причины: приложение обновилось и сменило целевую версию Android, сервер перестал принимать HTTPS-подключения, либо внутри приложения используется устаревшая HTTP-ссылка. Обновление приложения до последней версии — первое, что стоит проверить.

Как исправить ошибку в WebView моего приложения?

Лучший вариант — перевести загружаемый ресурс на HTTPS. Если это невозможно (например, локальное устройство), добавьте домен в Network Security Config с параметром cleartextTrafficPermitted="true". Глобальный атрибут usesCleartextTraffic="true" используйте только для отладки.

Открывается ли сайт с этой ошибкой на iPhone?

На iOS действует похожий механизм — App Transport Security, который тоже блокирует незашифрованные соединения, но текст ошибки будет другим. Общий принцип решения одинаков: переход на HTTPS или точечное исключение в настройках приложения.