Jelajahi Sumber

SplitHTTP: Remove `ok` compatibility logic (#3753)

Remove some code that was added to maintain compatibility with older
Xray versions. This breaks compatibility with Xray-core v1.8.23 or older.
mmmray 1 tahun lalu
induk
melakukan
ab3c00e96b

+ 1 - 3
transport/internet/splithttp/dialer.go

@@ -285,13 +285,11 @@ func Dial(ctx context.Context, dest net.Destination, streamSettings *internet.Me
 		}
 	}()
 
-	lazyRawDownload, remoteAddr, localAddr, err := httpClient.OpenDownload(context.WithoutCancel(ctx), requestURL.String())
+	reader, remoteAddr, localAddr, err := httpClient.OpenDownload(context.WithoutCancel(ctx), requestURL.String())
 	if err != nil {
 		return nil, err
 	}
 
-	reader := &stripOkReader{ReadCloser: lazyRawDownload}
-
 	writer := uploadWriter{
 		uploadPipeWriter,
 		maxUploadSize,

+ 0 - 8
transport/internet/splithttp/hub.go

@@ -196,14 +196,6 @@ func (h *requestHandler) ServeHTTP(writer http.ResponseWriter, request *http.Req
 		h.config.WriteResponseHeader(writer)
 
 		writer.WriteHeader(http.StatusOK)
-		if _, ok := request.URL.Query()["x_padding"]; !ok {
-			// in earlier versions, this initial body data was used to immediately
-			// start a 200 OK on all CDN. but xray client since 1.8.16 does not
-			// actually require an immediate 200 OK, but now requires these
-			// additional bytes "ok". xray client 1.8.24+ doesn't require "ok"
-			// anymore, and so this line should be removed in later versions.
-			writer.Write([]byte("ok"))
-		}
 
 		responseFlusher.Flush()
 

+ 0 - 48
transport/internet/splithttp/strip_ok_reader.go

@@ -1,48 +0,0 @@
-package splithttp
-
-import (
-	"bytes"
-	"io"
-
-	"github.com/xtls/xray-core/common/errors"
-)
-
-// in older versions of splithttp, the server would respond with `ok` to flush
-// out HTTP response headers early. Response headers and a 200 OK were required
-// to initiate the connection. Later versions of splithttp dropped this
-// requirement, and in xray 1.8.24 the server stopped sending "ok" if it sees
-// x_padding. For compatibility, we need to remove "ok" from the underlying
-// reader if it exists, and otherwise forward the stream as-is.
-type stripOkReader struct {
-	io.ReadCloser
-	firstDone  bool
-	prefixRead []byte
-}
-
-func (r *stripOkReader) Read(b []byte) (int, error) {
-	if !r.firstDone {
-		r.firstDone = true
-
-		// skip "ok" response
-		prefixRead := []byte{0, 0}
-		_, err := io.ReadFull(r.ReadCloser, prefixRead)
-		if err != nil {
-			return 0, errors.New("failed to read initial response").Base(err)
-		}
-
-		if !bytes.Equal(prefixRead, []byte("ok")) {
-			// we read some garbage byte that may not have been "ok" at
-			// all. return a reader that replays what we have read so far
-			r.prefixRead = prefixRead
-		}
-	}
-
-	if len(r.prefixRead) > 0 {
-		n := copy(b, r.prefixRead)
-		r.prefixRead = r.prefixRead[n:]
-		return n, nil
-	}
-
-	n, err := r.ReadCloser.Read(b)
-	return n, err
-}