@marcel91200 / caddy Mirror · read-only / commits / e7da3b26
Fork 0

Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS

Mirrored from https://github.com/Slazee/caddy.git

Synced Nov 12, 03:15 UTC

reverseproxy: Via header (#6275)

Matthew Holt committed Jan 17, 2025 at 06:49 UTC e7da3b267bcec986aaca960dd22ef834d3b9d4a6
1 file changed +18 -5
modules/caddyhttp/reverseproxy/reverseproxy.go
+18 -5
@@ -683,7 +683,7 @@ func (h Handler) prepareRequest(req *http.Request, repl *caddy.Replacer) (*http.
683 req.Header.Set("Early-Data", "1")
684 }
685
686 - reqUpType := upgradeType(req.Header)
686 + reqUpgradeType := upgradeType(req.Header)
687 removeConnectionHeaders(req.Header)
688
689 // Remove hop-by-hop headers to the backend. Especially
@@ -704,9 +704,9 @@ func (h Handler) prepareRequest(req *http.Request, repl *caddy.Replacer) (*http.
704
705 // After stripping all the hop-by-hop connection headers above, add back any
706 // necessary for protocol upgrades, such as for websockets.
707 - if reqUpType != "" {
707 + if reqUpgradeType != "" {
708 req.Header.Set("Connection", "Upgrade")
709 - req.Header.Set("Upgrade", reqUpType)
709 + req.Header.Set("Upgrade", reqUpgradeType)
710 normalizeWebsocketHeaders(req.Header)
711 }
712
@@ -732,6 +732,9 @@ func (h Handler) prepareRequest(req *http.Request, repl *caddy.Replacer) (*http.
732 return nil, err
733 }
734
735 + // Via header(s)
736 + req.Header.Add("Via", fmt.Sprintf("%d.%d Caddy", req.ProtoMajor, req.ProtoMinor))
737 +
738 return req, nil
739 }
740
@@ -882,13 +885,15 @@ func (h *Handler) reverseProxy(rw http.ResponseWriter, req *http.Request, origRe
885 }),
886 )
887
888 + const logMessage = "upstream roundtrip"
889 +
890 if err != nil {
886 - if c := logger.Check(zapcore.DebugLevel, "upstream roundtrip"); c != nil {
891 + if c := logger.Check(zapcore.DebugLevel, logMessage); c != nil {
892 c.Write(zap.Error(err))
893 }
894 return err
895 }
891 - if c := logger.Check(zapcore.DebugLevel, "upstream roundtrip"); c != nil {
896 + if c := logger.Check(zapcore.DebugLevel, logMessage); c != nil {
897 c.Write(
898 zap.Object("headers", caddyhttp.LoggableHTTPHeader{
899 Header: res.Header,
@@ -1024,6 +1029,14 @@ func (h *Handler) finalizeResponse(
1029 res.Header.Del(h)
1030 }
1031
1032 + // delete our Server header and use Via instead (see #6275)
1033 + rw.Header().Del("Server")
1034 + var protoPrefix string
1035 + if !strings.HasPrefix(strings.ToUpper(res.Proto), "HTTP/") {
1036 + protoPrefix = res.Proto[:strings.Index(res.Proto, "/")+1]
1037 + }
1038 + rw.Header().Add("Via", fmt.Sprintf("%s%d.%d Caddy", protoPrefix, res.ProtoMajor, res.ProtoMinor))
1039 +
1040 // apply any response header operations
1041 if h.Headers != nil && h.Headers.Response != nil {
1042 if h.Headers.Response.Require == nil ||