refactor: streamline http request forwarding

This commit is contained in:
SunBK201 2025-11-28 22:27:15 +08:00
parent 47566f9223
commit f7bca9cf0a
2 changed files with 6 additions and 19 deletions

View File

@ -5,7 +5,6 @@ import (
"fmt" "fmt"
"io" "io"
"log/slog" "log/slog"
"net"
"net/http" "net/http"
"strings" "strings"
"time" "time"
@ -132,12 +131,12 @@ func (s *Server) ProcessLR(c *ConnLink) (err error) {
req = s.Rewriter.Rewrite(req, c.LAddr, c.RAddr, decision) req = s.Rewriter.Rewrite(req, c.LAddr, c.RAddr, decision)
} }
if err = ForwardHTTP(c.RConn, req); err != nil { if err := req.Write(c.RConn); err != nil {
err = fmt.Errorf("ForwardHTTP: %w", err) return fmt.Errorf("req.Write: %w", err)
return
} }
if req.Header.Get("Upgrade") == "websocket" && req.Header.Get("Connection") == "Upgrade" { if req.Header.Get("Upgrade") == "websocket" && req.Header.Get("Connection") == "Upgrade" {
c.LogInfo("websocket upgrade detected, switch to direct proxy") c.LogInfo("websocket upgrade detected, switch to direct forward")
statistics.AddConnection(&statistics.ConnectionRecord{ statistics.AddConnection(&statistics.ConnectionRecord{
Protocol: sniff.WebSocket, Protocol: sniff.WebSocket,
SrcAddr: c.LAddr, SrcAddr: c.LAddr,
@ -147,14 +146,3 @@ func (s *Server) ProcessLR(c *ConnLink) (err error) {
} }
} }
} }
func ForwardHTTP(dst net.Conn, req *http.Request) error {
if err := req.Write(dst); err != nil {
return fmt.Errorf("req.Write: %w", err)
}
err := req.Body.Close()
if err != nil {
return fmt.Errorf("req.Body.Close: %w", err)
}
return nil
}

View File

@ -123,9 +123,8 @@ func (s *Server) rewriteAndForward(target net.Conn, req *http.Request, dstAddr,
if decision.ShouldRewrite() { if decision.ShouldRewrite() {
req = s.Rewriter.Rewrite(req, srcAddr, dstAddr, decision) req = s.Rewriter.Rewrite(req, srcAddr, dstAddr, decision)
} }
if err = base.ForwardHTTP(target, req); err != nil { if err := req.Write(target); err != nil {
err = fmt.Errorf("base.ForwardHTTP: %w", err) return fmt.Errorf("req.Write: %w", err)
return
} }
return nil return nil
} }