Happ VPN

Формат подписки Happ: список ссылок, Base64 и JSON

Автор
Екатерина Лебедева, редактор раздела knowledge base
Проверил:
Артём Волков
Проверено:
Опубликовано:
, обновлено
Версия гайда:
1.0

Коротко

Подписка в Happ — это адрес, по которому приложение получает список конфигураций серверов. Тело ответа бывает трёх видов: обычный список ссылок вроде vless:// построчно, тот же список, целиком закодированный в Base64, или JSON-массив полных конфигураций для ядра Xray-core.

Строка подписки может нести не только сами ссылки на серверы, но и служебные параметры — имя подписки, интервал обновления, остаток трафика — в виде строк с символом # в начале или тех же значений в заголовках HTTP-ответа. Формат Base64 для всей подписки отдельно в документации Happ не описан, но встречается у части провайдеров как общая практика экосистемы V2Ray и Xray, и совместимые клиенты обычно распознают его автоматически. У JSON-подписки другие правила: она может содержать не ссылки, а готовые конфигурации ядра целиком, и на неё распространяются более строгие ограничения по числу профилей маршрутизации. Отдельный случай — зашифрованная подписка happ://crypto, где формат тела скрыт от пользователя.

Три формата тела подписки

Адрес подписки — это обычная веб-ссылка, но то, что по ней возвращается, бывает трёх видов:

ФорматЧто внутриКто использует
Список ссылок открытым текстомСтроки vless://, vmess://, trojan://, ss://, socks://, hysteria2:// или hy2://, по одной на строкуБольшинство провайдеров
Тот же список в Base64Тот же текст, целиком закодированный в Base64Часть провайдеров; распространено в экосистеме V2Ray и Xray
JSON-массив конфигурацийГотовые объекты конфигурации ядра Xray-coreПровайдеры с расширенными настройками

Условный пример списка ссылок — именно так выглядит содержимое обычной, незашифрованной подписки после того, как Happ его получил:

Текст
vless://00000000-0000-0000-0000-000000000000@example.com:443?type=tcp&security=reality&flow=xtls-rprx-vision#Server-1
vmess://eyJhZGQiOiJleGFtcGxlLm5ldCIsInBvcnQiOjQ0M30=

Как устроена строка подписки

Кроме самих ссылок, ответ сервера подписки может нести служебные параметры — имя подписки, интервал автообновления, остаток трафика и срок действия. Передать их можно двумя способами: заголовками HTTP-ответа или строками с символом # в начале тела:

Текст
#profile-title: Example
#subscription-userinfo: upload=0; download=2000000000; total=10000000000; expire=1790951622
vless://00000000-0000-0000-0000-000000000000@example.com:443#Server-1

Подробный разбор конкретных параметров — profile-title, profile-update-interval, subscription-userinfo и других — вынесен на страницу заголовки подписки.

JSON-подписка — особый случай

Если провайдер отдаёт не ссылки, а массив готовых конфигураций ядра, к подписке применяются более строгие правила. У такой подписки может быть только 0 или 1 профиль маршрутизации, и добавить его вручную, скопировать из другой подписки или изменить нельзя — профиль приходит исключительно вместе с самой подпиской.

Каждая JSON-конфигурация передаётся Xray-core без изменений, поэтому обычные правила маршрутизации Happ к ней не применяются напрямую. Устройство самого JSON-объекта и то, что в нём остаётся под управлением Happ — выбор geo-файлов и удалённый DNS, — разобрано на странице JSON-конфигурации.

Обычная и зашифрованная подписка

Всё сказанное выше касается обычной подписки — её адрес открыт, а формат тела можно проверить самостоятельно. У зашифрованной подписки с адресом вида happ://crypto… иначе: и сам адрес сервера, и настройки серверов внутри скрыты от пользователя, ключи расшифровки встроены в приложение.

Формат зашифрованной подписки — не альтернатива Base64 или JSON, а отдельный слой поверх любого из них: провайдер сначала готовит обычную подписку, а затем прячет её адрес за ссылкой happ://crypto. История версий этого шифрования — на странице Happ Crypt: версии шифрования ссылок.

После добавления любой подписки её можно обновить вручную или дождаться автообновления — этот процесс разобран в инструкции как обновить подписку. Если адрес отдаёт неожиданный формат, приложение обычно сообщает об этом ошибкой «Url подписки не валидна».

Главное

  • Обычная подписка Happ — это список ссылок вроде vless:// и vmess://, каждая на своей строке.
  • Служебные параметры подписки передаются либо в теле строками с символом # в начале, либо в заголовках HTTP-ответа сервера.
  • Часть провайдеров кодирует тело обычной подписки целиком в Base64 — это принято в экосистеме V2Ray и Xray, хотя отдельно в документации Happ не описано.
  • JSON-подписка передаёт готовые конфигурации ядра Xray-core, а не отдельные ссылки, и допускает не больше одного профиля маршрутизации.
  • Зашифрованная подписка happ://crypto скрывает от пользователя и адрес, и формат тела — их видит только провайдер.

Частые вопросы

Чем обычная подписка отличается от JSON-подписки?

Обычная подписка отдаёт список ссылок вроде vless:// или vmess://, и Happ сам собирает из них конфигурации для ядра. JSON-подписка отдаёт уже готовые объекты конфигурации Xray-core целиком — с полями inbounds, outbounds и dns. Такие конфигурации передаются ядру без изменений, поэтому провайдер может использовать в них возможности, которых нет в простой ссылке. Взамен на JSON-подписку накладываются более жёсткие ограничения по маршрутизации.

Нужно ли самому раскодировать Base64 в подписке?

Обычно нет: если провайдер отдаёт подписку в Base64, Happ распознаёт и раскодирует её сам, как и большинство клиентов на Xray-core и V2Ray. Вручную раскодировать имеет смысл только для проверки содержимого, например если провайдер прислал ссылку без объяснений и вы хотите свериться с адресом сервера. Делайте это только на своём устройстве: тело подписки — такой же чувствительный доступ к серверу, как и отдельная ссылка.

Может ли одна подписка сочетать ссылки и JSON-конфигурации?

В документации Happ подписки описаны как два раздельных случая: обычная — со списком ссылок, и JSON — с массивом готовых конфигураций. Смешанный вид, где в одном ответе идут и строки-ссылки, и JSON-объекты, документация не описывает, и полагаться на такое поведение не стоит. Если провайдер использует JSON-конфигурации, для остальных серверов разумнее завести отдельную обычную подписку или добавить их отдельными ссылками.

Как понять, какой формат подписки прислал провайдер?

Проще всего открыть адрес подписки в браузере, если она не зашифрована и не скрыта: обычная подписка покажет текст со строками vless://, vmess:// и подобными или тот же текст в виде Base64-кода, а JSON-подписка — фигурные скобки и поля вроде inbounds и outbounds. Если браузер показывает случайный набор символов без структуры и подписка добавлена по ссылке happ://crypto, это зашифрованная подписка, и заглянуть в её содержимое нельзя в принципе.

Почему в теле подписки встречаются строки с символом #?

Так провайдер передаёт служебные параметры подписки прямо в теле ответа, не трогая заголовки HTTP: например #profile-title или #profile-update-interval с последующим значением. Happ читает эти строки при обновлении подписки наравне со значениями из заголовков ответа. Такой способ удобен, когда сервер подписки — простой статический файл, а не программа, способная формировать HTTP-заголовки на лету.

Упомянутые темы

Разделы по теме

Источники

  1. Документация Happ: добавление конфигурации и подписки — обращение 28 сентября 2026
  2. Документация Happ: управление приложением через подписку — обращение 28 сентября 2026
  3. Документация Happ: примеры ссылок и параметры — обращение 28 сентября 2026
  4. Документация Happ: маршрутизация — обращение 28 сентября 2026