Народный

Протоколы

HTTPUpgrade — HTTP/1.1 Upgrade transport для VLESS

Новый транспортный слой для VLESS и Trojan, добавленный в xray-core и sing-box в 2024 году: использует механизм HTTP/1.1 Upgrade для маскировки под обычный WebSocket-like трафик, но без overhead WS-фрейминга.

Определение

HTTPUpgrade — это транспортный слой для VLESS / Trojan / Shadowsocks, использующий механизм HTTP/1.1 Upgrade header (RFC 7230) для перехода с HTTP-handshake на сырой TCP-stream после успешного запроса. Добавлен в xray-core 1.8.7 (январь 2024) и в sing-box 1.7 (февраль 2024) как промежуточное решение между классическим WebSocket и более тяжёлым gRPC-transport.

Идея: повторить WS-маскировку (через nginx reverse-proxy с HTTP-handshake’ом и path’ом), но избавиться от overhead WebSocket-фрейминга (4–14 байт на каждый фрейм).

Как работает

HTTPUpgrade выглядит как обычный HTTP/1.1 GET-запрос с заголовком Upgrade: websocket (или custom), на который сервер отвечает 101 Switching Protocols, после чего TCP-соединение переходит в режим сырых байт без WS-фреймов. Алгоритм:

  1. TLS handshake. Клиент устанавливает TLS 1.3 к сервер-домену (обычно через CDN или nginx). SNI настоящий, сертификат настоящий.
  2. HTTP GET. Клиент шлёт:
    GET /your-path HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: ...
    Sec-WebSocket-Version: 13
  3. Server response. Сервер (xray / sing-box) отвечает:
    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
  4. Raw TCP. С этого момента TCP-stream — это сырой VLESS-трафик. Никаких WS-frame-header’ов, никаких opcode-байт. Просто payload.

Отличия от WebSocket:

  • WebSocket добавляет 4–14 байт header’а на каждый фрейм + mask-байты (на клиенте всегда), что замедляет throughput.
  • HTTPUpgrade делает один handshake, дальше — нулевой overhead.
  • WebSocket поддерживает ping/pong frames для keepalive, HTTPUpgrade нет — keepalive на уровне TCP.

Совместимость с reverse-proxy. HTTPUpgrade проходит через nginx, Caddy, traefik как обычный WebSocket-upgrade. Сервер видит legitimate HTTP/1.1 запрос с Upgrade header и устанавливает passthrough. Это позволяет коэкзистировать с настоящим веб-сайтом на том же домене.

Применение в России 2026

HTTPUpgrade — рекомендованный transport для VLESS в РФ если нужна CDN-маскировка. Когда выбирать его над альтернативами:

  • vs WebSocket-transport. HTTPUpgrade быстрее на 5–10% за счёт отсутствия WS-фрейминга. Маскировка от ТСПУ одинаковая (оба смотрят как HTTPS-веб-трафик после handshake).
  • vs SplitHTTP. SplitHTTP сильнее обфусцирован (множественные GET/POST), но имеет больший latency. HTTPUpgrade — single-connection.
  • vs Raw TCP. Raw TCP без транспорта быстрее всех, но не работает за CDN (Cloudflare/Fastly требуют HTTP-handshake).
  • vs gRPC. gRPC требует HTTP/2, что у некоторых CDN ограничено или дорого. HTTPUpgrade использует HTTP/1.1 — работает везде.

Setup. В xray-config:

"streamSettings": {
  "network": "httpupgrade",
  "httpupgradeSettings": {
    "path": "/your-secret-path",
    "host": "example.com"
  },
  "security": "tls"
}

Когда не использовать. Если у вас direct-VPS без CDN — лучше Reality без транспорта. HTTPUpgrade нужен именно для CDN-сценариев или для коэкзистанса с реальным веб-сайтом на том же сервере.

Юзеру: HTTPUpgrade — это «WebSocket для тех, кому жалко overhead’а». Если ваш провайдер использует WS — попросите попробовать HTTPUpgrade, скорость на slow-connection ощутимо выше.

Связанные термины

VLESS — основной протокол. WebSocket transport — предшественник. SplitHTTP — альтернатива с более сильной обфускацией. Xray-core и Sing-box — реализации.

Источники