---
name: cehoproxy_subscription_user_agent
description: Панель подписки отдаёт браузеру веб-страницу вместо списка нод — качать подписку надо клиентским User-Agent
metadata: 
  node_type: memory
  type: project
  originSessionId: cf75944b-cc91-4988-aab6-28363391917a
  modified: 2026-08-07T21:04:32.281Z
---

**Симптом:** «подписка точно рабочая, ссылка пингуется, а софт говорит, что нод нет».

**Причина:** панели подписок (Marzban, Remnawave, 3x-ui и родня) смотрят на `User-Agent`.
Браузеру они отдают человеческую HTML-страницу со ссылками и QR-кодом, клиенту — сам список нод.
CehoProxy представлялся Chrome (это нужно файловым хостингам за Cloudflare, иначе 403) и на
`https://sub.vlessi.cloud/...` получал 118 КБ разметки вместо 14 нод.

**Как проверить за минуту:**
```bash
curl -s -o /dev/null -w "%{size_download} %{content_type}\n" -A "CehoProxy/1.0" "<ссылка>"
curl -s -o /dev/null -w "%{size_download} %{content_type}\n" -A "Mozilla/5.0 ... Chrome/127" "<ссылка>"
```
Разные размеры → сервер различает клиента и браузер.

**Решение (в проекте с 1.1.3):** первый заход — как клиент подписки (`CehoProxy/<версия>`,
`Accept: text/plain,*/*`), браузерные заголовки остаются на повторных попытках. Ответ, начинающийся
с `<`, считается страницей и в кэш подписки не пишется. Правило общее для любого софта, который
качает подписки: сначала клиент, потом браузер.

Проект — [[cehoproxy_overview]]; про две подписки владельца и то, что ноды vlessi (reality+grpc)
из домашней сети не поднимаются ни через продукт, ни через конфиг, собранный руками, — там же.
