From 205928a74191fc61abdae9801bf56b8ecdfb8e35 Mon Sep 17 00:00:00 2001 From: yusing Date: Thu, 28 Aug 2025 22:03:48 +0800 Subject: [PATCH] refactor(real_ip): move header check before everything else --- internal/net/gphttp/middleware/real_ip.go | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/internal/net/gphttp/middleware/real_ip.go b/internal/net/gphttp/middleware/real_ip.go index 26c95750..bb9305da 100644 --- a/internal/net/gphttp/middleware/real_ip.go +++ b/internal/net/gphttp/middleware/real_ip.go @@ -59,6 +59,17 @@ func (ri *realIP) isInCIDRList(ip net.IP) bool { } func (ri *realIP) setRealIP(req *http.Request) { + // skip first if header is not present + realIPs := req.Header.Values(ri.Header) + if len(realIPs) == 0 { + // try non-canonical key + realIPs = req.Header[ri.Header] + } + + if len(realIPs) == 0 { + return + } + clientIPStr, _, err := net.SplitHostPort(req.RemoteAddr) if err != nil { clientIPStr = req.RemoteAddr @@ -77,18 +88,8 @@ func (ri *realIP) setRealIP(req *http.Request) { return } - realIPs := req.Header.Values(ri.Header) lastNonTrustedIP := "" - if len(realIPs) == 0 { - // try non-canonical key - realIPs = req.Header[ri.Header] - } - - if len(realIPs) == 0 { - return - } - if !ri.Recursive { lastNonTrustedIP = realIPs[len(realIPs)-1] } else {