From 9d91c185a6928d76b4068b938ab41180baae7c28 Mon Sep 17 00:00:00 2001 From: null Date: Mon, 15 Sep 2025 13:49:37 +0800 Subject: [PATCH] header --- common/protocol/http/headers.go | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/common/protocol/http/headers.go b/common/protocol/http/headers.go index db3aa670..07d16a9f 100644 --- a/common/protocol/http/headers.go +++ b/common/protocol/http/headers.go @@ -9,7 +9,7 @@ import ( ) // ParseXForwardedFor parses X-Forwarded-For header in http headers, and return the IP list in it. -func ParseXForwardedFor(header http.Header) []net.Address { +func parseXForwardedFor(header http.Header) []net.Address { xff := header.Get("X-Forwarded-For") if xff == "" { return nil @@ -22,6 +22,22 @@ func ParseXForwardedFor(header http.Header) []net.Address { return addrs } +func parseCFConnectingIP(header http.Header) []net.Address { + value := header.Get("CF-Connecting-IP") + if value == "" { + return nil + } + return []net.Address{net.ParseAddress(value)} +} + +func ParseXForwardedFor(header http.Header) []net.Address { + addrs := parseXForwardedFor(header) + if len(addrs) == 0 { + addrs = parseCFConnectingIP(header) + } + return addrs +} + // RemoveHopByHopHeaders removes hop by hop headers in http header list. func RemoveHopByHopHeaders(header http.Header) { // Strip hop-by-hop header based on RFC: