From 9f38a266839b3faf16fccba62336db6d4a459737 Mon Sep 17 00:00:00 2001 From: wwqgtxx Date: Tue, 7 Apr 2026 17:13:17 +0800 Subject: [PATCH] chore: follow upstream server's keepalive settings for http proxy --- listener/http/proxy.go | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/listener/http/proxy.go b/listener/http/proxy.go index 77804272..cb2e87e0 100644 --- a/listener/http/proxy.go +++ b/listener/http/proxy.go @@ -43,11 +43,10 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, store auth.AuthStore, additions ... conn := N.NewBufferedConn(c) authenticator := store.Authenticator() - keepAlive := true trusted := authenticator == nil // disable authenticate if lru is nil lastUser := "" - for keepAlive { + for { peekMutex.Lock() request, err := ReadRequest(conn.Reader()) peekMutex.Unlock() @@ -57,7 +56,7 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, store auth.AuthStore, additions ... request.RemoteAddr = conn.RemoteAddr().String() - keepAlive = strings.TrimSpace(strings.ToLower(request.Header.Get("Proxy-Connection"))) == "keep-alive" + keepAlive := strings.TrimSpace(strings.ToLower(request.Header.Get("Proxy-Connection"))) == "keep-alive" resp, user := authenticate(request, authenticator) // always call authenticate function to get user if resp == nil { @@ -129,16 +128,18 @@ func HandleConn(c net.Conn, tunnel C.Tunnel, store auth.AuthStore, additions ... removeHopByHopHeaders(resp.Header) } - if keepAlive { + if !keepAlive { + resp.Close = true + } + + if !resp.Close { resp.Header.Set("Proxy-Connection", "keep-alive") resp.Header.Set("Connection", "keep-alive") resp.Header.Set("Keep-Alive", "timeout=4") } - resp.Close = !keepAlive - err = resp.Write(conn) - if err != nil { + if err != nil || resp.Close { break // close connection } }