Skip to content

Запрос подписки и HWID ​

Заголовки запроса ​

При каждом запросе подписки RVC отправляет заголовки, по которым Remnawave считает устройства. HWID отправляется всегда: без него панель с включённым лимитом устройств не отдаёт подписку.

ЗаголовокПримерОписание
User-AgentRVC/1.0.3Всегда RVC/<версия>, не меняется. По нему панель выбирает формат ответа
x-hwid0CC407AE-A887-812A-E308-DC1876745368Идентификатор устройства
X-Device-IDто же значениеДубль x-hwid для серверов, которые ждут этот заголовок
x-device-osAndroid
x-ver-os15Версия Android
x-device-modelGoogle Pixel 7Производитель и модель
x-app-version1.0.3Версия RVC
Accept-Languageru-RUЯзык устройства

Как считается HWID ​

SHA-256("rvc_hwid_" + SHA-256(ANDROID_ID|производитель|модель|бренд|устройство|продукт|плата|железо)), оформленный как UUID в верхнем регистре. Он стабилен при переустановке приложения, но различается у разных приложений на одном телефоне — так устроен ANDROID_ID в Android 8+.

HWID и прочие заголовки устройства уходят только на исходный хост подписки: при перенаправлении на другой домен они не передаются. Перенаправление с https на http запрещено.

Если адрес недоступен ​

RVC пробует адрес из fallback-url. Если подписка не скачалась, а VPN включён, запрос повторяется через туннель. Ответы 404 и 410 означают, что подписка удалена, — тогда запасные пути не используются.

Форматы тела ​

ФорматПример
base64 со ссылками (обычный и URL-safe)dmxlc3M6Ly8...
Ссылки открытым текстом, по одной на строкуvless://…, hy2://…, awg://…
JSON-массив полных конфигураций Xray (Remnawave XRAY_JSON)[{"remarks":"🇩🇪 DE","outbounds":[…]}]
Одиночная конфигурация Xray{"inbounds":[…],"outbounds":[…]}
.conf WireGuard / AmneziaWG целиком[Interface] + [Peer] (можно в base64)
JSON-контейнер AmneziaWG{"type":"amneziawg","servers":[{"name":"DE","config":"<base64url .conf>"}]}

В текстовом теле также понимаются:

  • метаданные #ключ: значение (любой заголовок ответа) и форма #providerid ID. Заголовки ответа приоритетнее строк в теле;
  • строки маршрутизации rvc://routing/onadd/…, ://autorouting/onadd/https://… (см. Профили маршрутизации);
  • «серверы» с адресом 0.0.0.0 или 127.0.0.1 — так панели передают сообщения («Подписка истекла», «Лимит устройств»). Они не попадают в список серверов и показываются как сообщения подписки.

Схемы ssr://, tuic://, hysteria:// (v1) пропускаются.

Параметры в адресе подписки ​

После # в адресе можно указать имя и параметры запроса:

https://sub.example.com/abc#Мой VPN
https://203.0.113.10/abc#Мой VPN?resolve-address=203.0.113.10&host=sub.example.com
  • resolve-address — IP-адрес, к которому подключаться вместо резолва домена;
  • host — значение заголовка Host (фронтинг через CDN).

Автообновление ​

КогдаЧто обновляется
Раз в час в фоне (WorkManager, при наличии сети)Подписки, у которых истёк интервал: заданный пользователем → profile-update-interval → 12 часов
При открытии приложения (включено по умолчанию)Все подписки, не чаще раза в 5 минут
Кнопка «Обновить» или жест «потянуть вниз»Все подписки сразу

При ошибке старые серверы сохраняются, а в карточке подписки появляется причина. Фоновая задача заодно обновляет autorouting-профили, проверяет геофайлы, опрашивает push-адреса и напоминает об окончании подписки.