Trasporto XHTTP per Xray: guida completa alla configurazione e differenze rispetto a HTTP

In breve

Analisi approfondita del trasporto XHTTP in Xray: come funziona, le differenze con HTTP/WS/gRPC, quando utilizzarlo, come configurarlo correttamente su server e client, aumentare la resistenza al DPI e ridurre la latenza. Istruzioni passo passo, checklist, casi pratici e FAQ per professionisti.

Trasporto XHTTP per Xray: guida completa alla configurazione e differenze rispetto a HTTP

Introduzione

Il trasporto XHTTP per Xray è rapidamente diventato, tra il 2024 e il 2026, uno dei metodi più efficaci per mimetizzare il traffico come semplice HTTP e superare con successo i moderni DPI. Il motivo è semplice: molte reti continuano a consentire il classico HTTP(S) per traffico legittimo, mentre XHTTP simula questi dialoghi senza l'overhead del framing pesante di HTTP/2 o WebSocket. In questa guida esploreremo cos'è XHTTP nel contesto di Xray, come funziona internamente, le differenze rispetto al trasporto HTTP standard, forniremo schemi di configurazione resistenti al DPI, checklist, suggerimenti per migliorare performance e osservabilità, oltre agli errori più comuni che possono causare disconnessioni nelle reti reali. In sintesi, avrete una metodologia completa per progettare, implementare e mantenere XHTTP nei vostri casi d'uso: dall'accesso domestico fino alla rete aziendale e mobile.

Basi

Cos’è Xray e cos’è un trasporto

Xray-core è un motore proxy ad alte prestazioni che offre un modello flessibile protocollo + trasporto + crittografia. I protocolli di livello applicativo (VLESS, VMess, Trojan, ecc.) definiscono autenticazione e multiplexing delle sessioni, mentre il trasporto (TCP, WebSocket, HTTP/2, gRPC, QUIC, XHTTP) determina come i byte viaggiano in rete e quali segnali di rete possono essere rilevati da DPI e nodi intermedi. La crittografia (TLS/XTLS/REALITY) e l’emulazione del client (uTLS, fingerprint JA3) proteggono i contenuti e camuffano il profilo TLS nei comportamenti di browser reali.

Dove si colloca XHTTP in questa matrice

XHTTP è una modalità di trasporto che simula il comportamento tipico del dialogo HTTP/1.1 classico, permettendo l’uso sia di TLS sia di TCP puro (non serve l’equivalente h2c). L’obiettivo è fornire un profilo il più possibile «ordinario» per i DPI: header, metodi, percorsi, keep-alive, chunked payload, pattern Upgrade — e dopo un handshake legittimo trasformare il flusso in un canale bidirezionale per il traffico proxy vero e proprio. Dall’esterno sembra una richiesta/risposta HTTP lunga con connessione attiva, mentre internamente è una pipeline per il vostro VLESS/VMess.

Perché funziona contro il DPI

  • Semantica HTTP/1.1. La maggior parte dei DPI «capisce» e lascia passare header, metodi (GET/POST/OPTIONS), codifiche (chunked) e connessioni keep-alive tipiche di HTTP.
  • Framing minimo. A differenza di HTTP/2 e WebSocket, XHTTP non usa frame o opcodes espliciti, mantenendo il flusso come se fosse un corpo POST o un upgrade di connessione. Per molti sistemi di ispezione questo è un pattern «normale».
  • Camuffamento flessibile. Header (User-Agent, Accept, Referer), percorsi, host, codici di risposta e anche gli intervalli di trasmissione possono essere personalizzati per assomigliare a backend reali.

Con cosa confrontarlo: trasporto HTTP standard in Xray

Xray dispone di un trasporto HTTP (solitamente HTTP/2 o modalità simili a h2c) focalizzato sul framing e multiplexing dei flussi dentro HTTP/2. Utile, ma lascia tracce evidenti (impronte come ALPN h2, profili HPACK, preludi specifici) e richiede negoziazioni più complesse. XHTTP evita questi segnali forti di HTTP/2 ed è spesso preferibile in reti «strette» che consentono solo un «semplice» HTTP/1.1 su TLS 1.3, mentre HTTP/2/H3 viene sospettato o bloccato.

Approfondimento tecnico

Architettura del flusso XHTTP

  1. TLS/connessione TCP. Il client stabilisce una connessione TCP (o TLS). Con TLS si attiva uTLS per mimetizzarsi da browser reale (JA3, SNI, ALPN — tipicamente http/1.1 con opzionale h2 per maggiore realismo).
  2. Richiesta HTTP. Il client invia una richiesta HTTP/1.1 plausibile: metodo (spesso POST o GET), percorso (es. /api, /health, /v1/upload), header (Host, User-Agent, Accept, Accept-Language, Content-Type, Connection: keep-alive, TE: trailers, Cache-Control, X-Requested-With, ecc.). Sono possibili due modelli: “POST corposo” oppure “scambio simile a Upgrade”.
  3. Risposta server. Il server risponde con 200/204/101 (a seconda del pattern), header server corretti (Server: nginx, Date, Content-Type, Transfer-Encoding: chunked, Connection: keep-alive), poi mantiene aperta la connessione.
  4. Tunnel. Dopodiché entrambe le parti scambiano i byte utili del protocollo Xray, nascosti nel corpo o segmenti chunked. Per il DPI appare come connessione HTTP viva e persistente con body/chunk continui.

Differenze chiave tra XHTTP, HTTP/2 e WebSocket

  • Nessun framing esplicito a livello browser. H2/H3 vengono riconosciuti tramite ALPN h2/h3, priorità, HPACK/QPACK. WS si identifica con Upgrade: websocket, Sec-WebSocket-Key/Accept. XHTTP usa header «ordinari».
  • Meno firme distintive. Il DPI è spesso addestrato a riconoscere WebSocket o profili HPACK insoliti. XHTTP si incanala in uno stack HTTP/1.1 tradizionale e familiare.
  • Falsa destinazione flessibile. Può sembrare un downloader, uploader, SSE a lungo termine o un endpoint API con risposte lente.
  • Affidabilità in reti «rumorose». La semplice gestione di HTTP/1.1 e chunked funziona spesso senza problemi dietro proxy aziendali e NAT.

Performance e overhead

  • Overhead header: contenuto e prevedibile. Su sessioni lunghe l’impatto è minimo.
  • RTT: +1 RTT per la richiesta/risposta HTTP oltre TLS. Riducibile da keep-alive e dati anticipati (quando supportato).
  • Throughput: comparabile a TCP+TLS. Collo di bottiglia tipico è il proxy/bilanciatore e buffering.

Compatibilità e ALPN

In pratica ALPN «http/1.1» fornisce il profilo più neutrale. Se la rete preferisce h2, potete aggiungere «h2» nella lista, ma il server deve rispondere correttamente, altrimenti si generano errori inutili. Per maggiore realismo, attivate uTLS con profili recenti di Chrome/Firefox.

Sezione pratica 1: Schema minimo VLESS+XHTTP su TLS

Obiettivo

Far girare Xray con protocollo VLESS e trasporto XHTTP sulla porta 443/tcp con certificato valido. Esternamente un sito normale sullo stesso dominio o un placeholder statico; il traffico proxy passa tramite percorso XHTTP.

Passaggi

  1. Dominio e DNS. Impostate record A/AAAA sul VPS. Verificate che l’IP non sia in blacklist evidenti.
  2. Certificato. Installate certbot o Caddy per TLS automatico. Riducete emissioni di ALPN non necessarie se non usate h2.
  3. Xray. Aggiornate all’ultima versione 2026. Controllate che la build supporti il trasporto XHTTP.
  4. Configurazione server. Create un inbound VLESS con streamSettings: network: xhttp, security: tls. Impostate header e percorso credibili.
  5. Configurazione client. Specificate network: xhttp, serverName e percorso/host uguali al server. Abilitate uTLS.
  6. Firewall. Consentite 443/tcp, limitate porte non necessarie. Attivate ottimizzazioni conntrack.
  7. Verifica. Usate curl -v https://vostro_dominio/percorso — dovete ottenere un onesto 200/204. Poi testate la connessione con client Xray e controllate le metriche nei log.

Esempio parametri (semplificato)

Server: protocol: vless; clients: UUID; decryption: none; streamSettings: network: xhttp; security: tls; tlsSettings: serverName: vostro_dominio; alpn: ["http/1.1"]; xhttpSettings: host: ["vostro_dominio"], path: "/api", method: "POST", headers: {"User-Agent": ["Mozilla/5.0"], "Accept": ["* .related-articles { padding-top: 1rem; } .related-title { font-size: 1.75rem; font-weight: 700; color: var(--gray-900); margin-bottom: 1.5rem; padding-bottom: 0.75rem; border-bottom: 2px solid rgba(59,130,246,0.1); } .related-card { display: flex; flex-direction: column; gap: 0.5rem; height: 100%; background: white; border: 2px solid #e5e7eb; border-radius: 1rem; padding: 1.25rem 1.5rem; text-decoration: none; transition: all 0.3s cubic-bezier(0.4,0,0.2,1); box-shadow: 0 2px 8px rgba(0,0,0,0.04); } .related-card:hover { transform: translateY(-4px); box-shadow: 0 12px 24px rgba(59,130,246,0.15); border-color: var(--primary); } .related-card-title { font-size: 1.0625rem; font-weight: 600; color: var(--gray-900); line-height: 1.4; } .related-card-meta { font-size: 0.8125rem; color: #6b7280; display: flex; align-items: center; gap: 0.375rem; } .article-tldr { position: relative; margin: 0 0 2rem; padding: 1.25rem 1.5rem 1.25rem 1.75rem; background: linear-gradient(135deg, rgba(59,130,246,0.06), rgba(139,92,246,0.05)); border-start: 4px solid var(--primary); border-radius: 0.75rem; } .article-tldr-label { display: inline-block; font-size: 0.75rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: var(--primary); margin-bottom: 0.4rem; } .article-tldr p { margin: 0; font-size: 1.0625rem; line-height: 1.6; color: #374151; font-weight: 500; } [data-bs-theme="dark"] .article-tldr { background: linear-gradient(135deg, rgba(59,130,246,0.10), rgba(139,92,246,0.10)); } [data-bs-theme="dark"] .article-tldr p { color: #e5e7eb; } [data-bs-theme="dark"] .article-tldr-label { color: #60a5fa; } .author-bio-extended { margin: 2rem 0; } .author-bio-card { background: linear-gradient(135deg, rgba(59,130,246,0.03), rgba(139,92,246,0.03)); border: 1px solid rgba(59,130,246,0.15); border-radius: 1.5rem; padding: 2rem; box-shadow: 0 4px 12px rgba(0,0,0,0.04); transition: all 0.3s; } .author-bio-card:hover { box-shadow: 0 8px 24px rgba(59,130,246,0.12); transform: translateY(-2px); } .author-bio-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.5rem; padding-bottom: 1rem; border-bottom: 2px solid rgba(59,130,246,0.15); } .author-bio-icon { width: 48px; height: 48px; background: linear-gradient(135deg, var(--primary), var(--accent)); border-radius: 12px; display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 12px rgba(59,130,246,0.3); } .author-bio-icon i { color: white; font-size: 1.25rem; } .author-bio-title { font-size: 1.5rem; font-weight: 700; color: var(--gray-900); margin: 0; } .author-bio-content { display: grid; grid-template-columns: 150px 1fr; gap: 2rem; align-items: start; } .author-photo-wrapper { position: relative; width: 150px; height: 150px; } .author-photo { width: 100%; height: 100%; object-fit: cover; border-radius: 1rem; border: 3px solid white; box-shadow: 0 8px 20px rgba(0,0,0,0.1); } .author-photo-badge { position: absolute; bottom: -8px; right: -8px; width: 36px; height: 36px; background: linear-gradient(135deg, var(--success), #059669); border-radius: 50%; display: flex; align-items: center; justify-content: center; border: 3px solid white; } .author-photo-badge i { color: white; font-size: 0.75rem; } .author-main-info { margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid rgba(0,0,0,0.08); } .author-name { font-size: 1.25rem; font-weight: 700; color: var(--gray-900); margin: 0 0 0.25rem; } .author-job { font-size: 0.9rem; color: var(--primary); margin: 0; font-weight: 500; } .author-info-list { display: flex; flex-direction: column; gap: 1rem; } .author-info-item { display: flex; gap: 1rem; align-items: flex-start; } .info-icon { width: 36px; height: 36px; min-width: 36px; background: rgba(59,130,246,0.08); border-radius: 8px; display: flex; align-items: center; justify-content: center; } .info-icon i { color: var(--primary); font-size: 0.875rem; } .info-content { font-size: 0.9rem; line-height: 1.5; } .info-content strong { display: block; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.5px; color: #6b7280; margin-bottom: 0.25rem; } .expertise-tags { display: flex; flex-wrap: wrap; gap: 0.5rem; margin-top: 0.25rem; } .expertise-tag { padding: 0.25rem 0.75rem; background: rgba(59,130,246,0.08); color: var(--primary); border-radius: 1rem; font-size: 0.8rem; font-weight: 500; border: 1px solid rgba(59,130,246,0.15); } .achievements-list { margin: 0.25rem 0 0; padding-left: 1.25rem; } .achievements-list li { font-size: 0.9rem; margin-bottom: 0.25rem; } .author-bio-text { margin-top: 1rem; padding: 1rem; background: rgba(0,0,0,0.02); border-radius: 0.75rem; border-start: 3px solid var(--primary); } .author-bio-text p { margin: 0; font-size: 0.9rem; line-height: 1.6; color: #4b5563; } @media (max-width: 991px) { .article-content-card { padding: 2rem; } .article-title { font-size: 2rem !important; } .articleBody { font-size: 1rem; } .articleBody h2 { font-size: 1.75rem; } .articleBody h3 { font-size: 1.375rem; } } @media (max-width: 768px) { .article-content-card { padding: 1.5rem; border-radius: 1rem; } .article-title { font-size: 1.75rem !important; } .article-nav-title { font-size: 1rem; } .author-bio-content { grid-template-columns: 1fr; } .author-photo-wrapper { width: 100px; height: 100px; margin: 0 auto; } .info-icon { align-self: flex-start; } } [data-bs-theme="dark"] .article-search { background: #1f2937; border-color: rgba(255,255,255,0.1); color: #f9fafb; } [data-bs-theme="dark"] .article-search::placeholder { color: #9ca3af; } [data-bs-theme="dark"] .article-search:focus { border-color: var(--primary) !important; background: #1f2937; } [data-bs-theme="dark"] .article-content-card { background: #1f2937; border: 1px solid rgba(255,255,255,0.06); } [data-bs-theme="dark"] .article-title { color: #f9fafb !important; } [data-bs-theme="dark"] .article-meta { color: #9ca3af !important; } [data-bs-theme="dark"] .articleBody { color: #d1d5db; } [data-bs-theme="dark"] .articleBody h2, [data-bs-theme="dark"] .articleBody h3, [data-bs-theme="dark"] .articleBody h4 { color: #f9fafb; } [data-bs-theme="dark"] .articleBody a { color: #60a5fa; border-bottom-color: rgba(96,165,250,0.3); } [data-bs-theme="dark"] .articleBody a:hover { color: #93c5fd; border-bottom-color: #60a5fa; } [data-bs-theme="dark"] .articleBody blockquote { background: linear-gradient(135deg, rgba(59,130,246,0.1), rgba(139,92,246,0.1)); color: #d1d5db; } [data-bs-theme="dark"] .articleBody code { background: rgba(255,255,255,0.05); color: #f472b6; } [data-bs-theme="dark"] .articleBody pre { background: #111827; } [data-bs-theme="dark"] .article-nav-link { background: #1f2937; border-color: rgba(255,255,255,0.1); } [data-bs-theme="dark"] .article-nav-link:hover { border-color: rgba(59,130,246,0.5); } [data-bs-theme="dark"] .article-nav-direction { color: #60a5fa; } [data-bs-theme="dark"] .article-nav-title { color: #f9fafb; } [data-bs-theme="dark"] .author-bio-card { background: linear-gradient(135deg, rgba(59,130,246,0.08), rgba(139,92,246,0.08)); border-color: rgba(59,130,246,0.25); } [data-bs-theme="dark"] .author-bio-title, [data-bs-theme="dark"] .author-name { color: #f9fafb; } [data-bs-theme="dark"] .author-job { color: #60a5fa; } [data-bs-theme="dark"] .author-photo { border-color: #1f2937; } [data-bs-theme="dark"] .author-photo-badge { border-color: #1f2937; } [data-bs-theme="dark"] .author-main-info { border-bottom-color: rgba(255,255,255,0.1); } [data-bs-theme="dark"] .info-icon { background: linear-gradient(135deg, rgba(59,130,246,0.15), rgba(139,92,246,0.15)); } [data-bs-theme="dark"] .info-content { color: #d1d5db; } [data-bs-theme="dark"] .info-content strong { color: #f9fafb; } [data-bs-theme="dark"] .expertise-tag { background: linear-gradient(135deg, rgba(59,130,246,0.15), rgba(139,92,246,0.15)); color: #60a5fa; border-color: rgba(59,130,246,0.3); } [data-bs-theme="dark"] .author-bio-text { background: rgba(255,255,255,0.03); border-start-color: #60a5fa; } [data-bs-theme="dark"] .author-bio-text p { color: #d1d5db; } [data-bs-theme="dark"] .article-share-section h4 { color: #f9fafb; } [data-bs-theme="dark"] .related-title { color: #f9fafb; border-bottom-color: rgba(96,165,250,0.2); } [data-bs-theme="dark"] .related-card { background: #1f2937; border-color: rgba(255,255,255,0.1); } [data-bs-theme="dark"] .related-card:hover { border-color: rgba(59,130,246,0.5); } [data-bs-theme="dark"] .related-card-title { color: #f9fafb; } [data-bs-theme="dark"] .related-card-meta { color: #9ca3af; } body { background: #0A0E14 !important; } .breadcrumb { background: transparent !important; } .breadcrumb-item a { color: #8a94a6; } .breadcrumb-item.active { color: #6B7689 !important; } .breadcrumb-item + .breadcrumb-item::before { color: #4a5260 !important; } .article-content-card { background: transparent !important; border: 0 !important; box-shadow: none !important; } .article-title { color: #F5F6F7 !important; } .article-meta { color: #8a94a6 !important; } .article-meta i { color: #19E3B1 !important; } .article-search { background: #11161F !important; border: 1px solid rgba(245,246,247,.12) !important; color: #F5F6F7 !important; } .article-search::placeholder { color: #6B7689 !important; } .articleBody { color: #C5CAD3 !important; } .articleBody h2, .articleBody h3, .articleBody h4 { color: #F5F6F7 !important; } .articleBody h2 { border-bottom-color: rgba(245,246,247,.10) !important; } .articleBody a { color: #19E3B1 !important; border-bottom-color: rgba(25,227,177,.35) !important; } .articleBody a:hover { color: #3BEBC0 !important; border-bottom-color: #3BEBC0 !important; } .articleBody ul li::marker { color: #19E3B1 !important; } .articleBody blockquote { background: rgba(25,227,177,.05) !important; border-start-color: #19E3B1 !important; color: #aeb6c2 !important; } .articleBody code { background: rgba(25,227,177,.12) !important; color: #3BEBC0 !important; } .articleBody pre { background: #11161F !important; border: 1px solid rgba(245,246,247,.08) !important; color: #c2c9d4 !important; } .articleBody pre code { color: #c2c9d4 !important; } .articleBody img { box-shadow: 0 10px 34px rgba(0,0,0,.5) !important; } .article-tldr { background: rgba(25,227,177,.07) !important; border: 1px solid rgba(25,227,177,.22) !important; border-start: 3px solid #19E3B1 !important; } .article-tldr-label { color: #19E3B1 !important; } .article-tldr p { color: #c2c9d4 !important; } .article-share-section h4 { color: #F5F6F7 !important; } .article-nav-link, .related-card { background: #1A2230 !important; border: 1px solid rgba(245,246,247,.08) !important; box-shadow: none !important; } .article-nav-link:hover, .related-card:hover { border-color: rgba(25,227,177,.35) !important; box-shadow: 0 16px 40px -16px rgba(0,0,0,.6) !important; } .article-nav-direction { color: #19E3B1 !important; } .article-nav-title, .related-card-title, .related-title { color: #F5F6F7 !important; } .related-title { border-bottom-color: rgba(245,246,247,.10) !important; } .related-card-meta { color: #6B7689 !important; } .related-card-meta i { color: #19E3B1 !important; } .author-bio-card { background: #11161F !important; border-color: rgba(245,246,247,.08) !important; } .author-bio-header { border-bottom-color: rgba(245,246,247,.10) !important; } .author-bio-title, .author-name { color: #F5F6F7 !important; } .author-job { color: #19E3B1 !important; } .author-bio-icon { background: #19E3B1 !important; } .author-bio-icon i { color: #0A0E14 !important; } .author-main-info { border-bottom-color: rgba(245,246,247,.08) !important; } .author-photo { border-color: #1A2230 !important; } .info-icon { background: rgba(25,227,177,.12) !important; } .info-icon i { color: #19E3B1 !important; } .info-content { color: #c2c9d4 !important; } .info-content strong { color: #8a94a6 !important; } .expertise-tag { background: rgba(25,227,177,.10) !important; color: #19E3B1 !important; border-color: rgba(25,227,177,.22) !important; } .author-bio-text { background: rgba(255,255,255,.03) !important; border-start-color: #19E3B1 !important; } .author-bio-text p, .achievements-list li, .author-bio-content { color: #aeb6c2 !important; }