В ссылках и настройках VPN всё чаще встречается type=xhttp. Если вы читали, как работают VLESS и Reality, возникает логичный вопрос: зачем ещё что-то, если Reality и так маскирует трафик под обычный сайт? Коротко: Reality и XHTTP закрывают разные уровни проверки и не конкурируют, а дополняют друг друга. Разберёмся подробно.
Какую проблему решает XHTTP
Системы анализа трафика проверяют соединение на нескольких уровнях: сигнатуры, отпечаток TLS, активное зондирование и поведение. Подробно эти уровни разобраны в статье как DPI распознаёт VPN.
Reality отлично проходит первые три: рукопожатие неотличимо от настоящего, а зонд видит настоящий сайт. Но после рукопожатия VPN-соединение живёт не так, как сайт:
- одно TCP-соединение держится часами;
- через него идут гигабайты в обе стороны;
- внутри видны характерные рисунки пакетов, например «TLS внутри TLS».
Обычный браузер ведёт себя иначе: много коротких HTTP-запросов, параллельные соединения, которые открываются и закрываются. XHTTP заставляет VPN-трафик выглядеть как такой браузерный трафик.
Как это устроено
XHTTP (раньше назывался SplitHTTP) — это транспорт, то есть способ переноски данных. Он упаковывает поток в обычные HTTP-запросы: данные к серверу уходят в POST-запросах, данные от сервера приходят в ответах. Снаружи это похоже на работу веб-приложения — например, загрузку файлов или долгую ленту обновлений.
Главная идея видна в старом названии: Split, то есть разделение. Отправка и получение данных могут идти разными HTTP-запросами и даже разными соединениями. Для системы анализа это уже не один подозрительный туннель, а несколько обычных на вид запросов, которые ещё нужно связать между собой.
Дополнительно XHTTP:
- добавляет случайное заполнение в заголовки запросов (
xPaddingBytes), чтобы размеры не повторялись; - умеет мультиплексировать несколько логических сессий в одно соединение и периодически менять соединения, как это делает браузер (механизм XMUX);
- работает поверх HTTP/1.1, HTTP/2 и HTTP/3.
Три режима работы
| Режим | Как передаются данные | Скорость | Совместимость |
|---|---|---|---|
packet-up |
к серверу — множеством коротких POST, от сервера — одним длинным ответом | ниже | проходит почти через любые веб-серверы и CDN |
stream-up |
к серверу — одним длинным POST, от сервера — отдельным ответом | выше | нужны подходящие настройки прокси или CDN |
stream-one |
туда и обратно — внутри одного запроса | максимальная | для прямого подключения, в том числе с Reality |
Есть ещё auto: клиент выбирает режим сам. С Reality он выбирает stream-one, с TLS поверх HTTP/2 — stream-up, в остальных случаях — packet-up.
XHTTP + Reality
Связку можно описать так: Reality отвечает за рукопожатие, XHTTP — за всё, что после него.
- Для внешнего наблюдателя соединение начинается как заход на популярный сайт — это работа Reality.
- Дальше внутри идут данные, по структуре похожие на обычные HTTP/2-запросы, а не на сплошной поток туннеля, — это работа XHTTP.
В VLESS-ссылке это выглядит как type=xhttp&security=reality, плюс параметры path и mode. Что значит каждый параметр, разобрано в статье VLESS-ссылка: что значат параметры.
XHTTP через CDN
Второе важное свойство: XHTTP работает через CDN — сети доставки контента, через которые крупные сайты раздают данные. Для провайдера в таком случае соединение идёт к CDN, а не к VPN-серверу, а адрес сервера наружу вообще не виден.
Мощная, но продвинутая возможность — XHTTP умеет разнести отправку и получение по разным маршрутам. Например, отправлять данные через CDN, а получать напрямую по Reality с другим адресом. Сопоставить эти два потока внешнему наблюдателю очень сложно.
Минусы и ограничения
Честно о том, где XHTTP не идеален:
- Скорость. В
packet-upмного накладных расходов на заголовки.stream-oneс Reality по скорости близок к обычному TCP, но совместим не со всем. - Версии должны совпадать. Транспорт активно развивается, и старые клиенты могут не поддерживать новые параметры. Если после обновления сервера что-то перестало работать — обновите приложение.
- Не все клиенты поддерживают. Нужен клиент на свежем ядре Xray или sing-box. Старые версии приложений XHTTP не знают.
- От белых списков не спасает. Если адрес сервера не в разрешённом перечне, никакой транспорт не поможет. Исключение — CDN, чьи адреса есть в перечне, но это уже отдельная и нестабильная история.
XHTTP, WebSocket и gRPC — в чём разница
| WebSocket | gRPC | XHTTP | |
|---|---|---|---|
| Работа через CDN | да | да | да |
| Совместим с Reality | нет | да | да |
| Разделение отправки и получения | нет | нет | да |
| Маскировка поведения | слабая | средняя | сильная |
| HTTP/3 | нет | нет | да |
WebSocket и gRPC исторически использовались, чтобы пропускать VPN через CDN. XHTTP задуман как их замена: он умеет всё то же, но лучше маскируется.
Нужно ли вам разбираться в этом
Если вы пользуетесь готовым сервисом — нет. Выбор транспорта — задача сервиса: в подписке уже прописаны нужные параметры, а приложение применит их само. Ваша задача — держать клиент обновлённым и пользоваться подпиской, а не отдельными ссылками. Тогда при смене настроек на сервере всё подтянется автоматически.
Частые вопросы
XHTTP — это новый протокол вместо VLESS? Нет. VLESS — протокол, XHTTP — транспорт, Reality или TLS — слой защиты. Это три независимых уровня, которые комбинируются.
Что быстрее: VLESS + Reality по TCP или через XHTTP?
Обычно TCP с Vision немного быстрее. XHTTP в режиме stream-one близок к нему, а packet-up медленнее, зато проходит там, где остальное не проходит.
Поддерживает ли XHTTP Happ?
Актуальные версии клиентов на ядре Xray поддерживают XHTTP. Если ссылка с type=xhttp не подключается, в первую очередь обновите приложение.
Попробовать
TSPU Xray VPN построен на VLESS + Reality: готовая подписка для Happ, v2RayTun и Hiddify, 14 узлов, а для мобильных сетей с белыми списками — отдельный сервер в нашем приложении. Новым пользователям — 3 дня бесплатно.
