XHTTP transport

XHTTP VPN: VLESS Over HTTP With REALITY

XHTTP carries VLESS as ordinary-looking HTTP traffic behind a REALITY handshake. Instead of one long two-way stream, your uploads travel as a series of separate HTTP requests and downloads come back on their own response, closer to how a browser loading a site behaves.

TCPREALITY handshakeSplit HTTP requestsDirect or 2-hop
Network
TCP
Handshake
REALITY
Uploads
Split
Needs UDP
No

01 /Why a second TCP transport

Reality hides the handshake, but after it a Reality tunnel is one long TLS connection carrying traffic both ways, and some filters judge connections by exactly that shape: how long they last, how much flows each way, how steady it is. XHTTP (formerly SplitHTTP) changes the shape. In the packet-up mode ProofKit links use, your app sends uploads as a series of separate HTTP POST requests and receives downloads on a separate response, with random padding added.

02 /How it runs on ProofKit

  • REALITY in front. The handshake borrows the same website name as the node's Reality transport, and probes are passed through to that real site, as with Reality.
  • Its own port. XHTTP listens on a separate TCP port of the exit node, 8444 by default. On a 2-hop route the entry node forwards it unopened to the exit, on a port of its own.
  • Straight to the node. Your app connects to the node directly, not through a CDN: a REALITY handshake has to be answered by the node itself.
  • Per-user billing. It is VLESS with your personal ID, so traffic is counted per user like Reality.

03 /When to use it

  • Reality connects but stalls or gets cut after a while, and UDP is blocked, which rules out Hysteria2.
  • Your network is known to flag long, steady TLS sessions.

Expect a little more overhead than Reality: many short requests cost more than one stream.

04 /Where it fails

  • Only ports 80 and 443 open. Some corporate and hotel networks allow nothing else, and XHTTP uses its own port. Use Reality on 443 there.
  • Address blocks. Like Reality, it connects to the node's IP address. If that is blocked, use a 2-hop route or olcRTC.
  • Allowlist networks. If only approved services are reachable, olcRTC is the transport built for that.

05 /Apps and setup

XHTTP needs an app built on Xray-core: Happ, V2RayNG (Android) or V2RayN (Windows). Apps built on sing-box cannot run it. The dashboard's list for these apps carries Reality only until you change it:

  1. Connect to a node in the marketplace.
  2. In the dashboard, open Subscription URL, set Your app to Happ · Hiddify · V2RayNG and Transports in subscription to All or XHTTP.
  3. Copy the URL, add it as a subscription in your app and pick an entry ending in · XHTTP.

With XHTTP selected, a route whose node does not offer XHTTP keeps its Reality entry, so no route drops out of your list.

06 /What it costs

The same as Reality and Hysteria2: the node's per-GB price plus the 20% network fee, locked when you connect and paid from your TON deposit in escrow. Only olcRTC has a price of its own, from 20 November 2026. Unused balance can be withdrawn.

// faq

Common questions

What does XHTTP add over VLESS Reality?

A different traffic shape. After the handshake Reality is one long TLS connection; XHTTP sends uploads as separate HTTP requests with padding and downloads on a separate response, which looks more like a browser loading a site. The REALITY handshake in front is the same.

Does XHTTP hide the server name?

No. Like Reality, the handshake shows the borrowed website's name on purpose: that is the disguise. If you need the name hidden, Hysteria2 scrambles every packet instead.

Can XHTTP run through a CDN?

Not on ProofKit. XHTTP can sit behind a CDN in other setups, but ProofKit nodes serve it with a REALITY handshake, which only the node itself can answer, so your app connects to the node directly.

Which apps support XHTTP?

Apps built on Xray-core, such as Happ, V2RayNG and V2RayN. Apps built on sing-box cannot run it. Set Transports in subscription to All or XHTTP, because the list carries Reality only by default.

Is XHTTP billed the same way?

Yes. It costs the same per GB as Reality and Hysteria2: the node's price plus the 20% network fee, locked when you connect. Only olcRTC has a price of its own, from 20 November 2026.

// ready to try it

Try XHTTP where Reality stalls

Connect to a node, set your subscription to All or XHTTP, and compare it with Reality on the same network. Both stay in one list, so switching is a tap in your app.

~/proofkit — what your app imports
vless://<id>@<node>:8444
?type=xhttp&mode=packet-up
&security=reality&fp=chrome
&sni=<borrowed-site>
&path=<path>&pbk=<key>