Формат подписки 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-заголовки на лету.
Упомянутые темы
Похожие материалы
Разделы по теме
Источники
- Документация Happ: добавление конфигурации и подписки — обращение 28 сентября 2026
- Документация Happ: управление приложением через подписку — обращение 28 сентября 2026
- Документация Happ: примеры ссылок и параметры — обращение 28 сентября 2026
- Документация Happ: маршрутизация — обращение 28 сентября 2026