From a6ec3b6e70345795d5b53d30aee313661708ac6f Mon Sep 17 00:00:00 2001 From: Dmitrii Makhno Date: Mon, 2 Feb 2026 11:07:45 +0300 Subject: [PATCH] XHTTP transport: Fix "auto" mode with REALITY (#5638) Fixes https://github.com/XTLS/Xray-core/issues/5635 BTW, fixes https://github.com/XTLS/Xray-core/issues/5631 --- infra/conf/transport_internet.go | 5 +++-- transport/internet/splithttp/dialer.go | 11 ++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/infra/conf/transport_internet.go b/infra/conf/transport_internet.go index 716faae6..fd06e714 100644 --- a/infra/conf/transport_internet.go +++ b/infra/conf/transport_internet.go @@ -314,6 +314,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) { switch c.UplinkDataPlacement { case "": c.UplinkDataPlacement = "body" + case "body": case "cookie", "header": if c.Mode != "packet-up" { return nil, errors.New("UplinkDataPlacement can be " + c.UplinkDataPlacement + " only in packet-up mode") @@ -334,7 +335,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) { switch c.SessionPlacement { case "": c.SessionPlacement = "path" - case "cookie", "header", "query": + case "path", "cookie", "header", "query": default: return nil, errors.New("unsupported session placement: " + c.SessionPlacement) } @@ -342,7 +343,7 @@ func (c *SplitHTTPConfig) Build() (proto.Message, error) { switch c.SeqPlacement { case "": c.SeqPlacement = "path" - case "cookie", "header", "query": + case "path", "cookie", "header", "query": if c.SessionPlacement == "path" { return nil, errors.New("SeqPlacement must be path when SessionPlacement is path") } diff --git a/transport/internet/splithttp/dialer.go b/transport/internet/splithttp/dialer.go index d8519818..4d02a671 100644 --- a/transport/internet/splithttp/dialer.go +++ b/transport/internet/splithttp/dialer.go @@ -272,11 +272,6 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me requestURL.Host = dest.Address.String() } - sessionId := "" - if transportConfiguration.Mode != "stream-one" { - sessionIdUuid := uuid.New() - sessionId = sessionIdUuid.String() - } requestURL.Path = transportConfiguration.GetNormalizedPath() requestURL.RawQuery = transportConfiguration.GetNormalizedQuery() @@ -293,6 +288,12 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me } } + sessionId := "" + if mode != "stream-one" { + sessionIdUuid := uuid.New() + sessionId = sessionIdUuid.String() + } + errors.LogInfo(ctx, fmt.Sprintf("XHTTP is dialing to %s, mode %s, HTTP version %s, host %s", dest, mode, httpVersion, requestURL.Host)) requestURL2 := requestURL