@marcel91200 / caddy Mirror · read-only / commits / 8285eba8
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 11, 18:30 UTC

caddyhttp: allow customizing the Server header (#7338)

Kévin Dunglas committed Nov 4, 2025 at 05:00 UTC 8285eba8426e3c75ed81d6a8c5cd6ec685430d47
1 file changed +13 -13
modules/caddyhttp/server.go
+13 -13
@@ -285,6 +285,11 @@ type Server struct {
285 onStopFuncs []func(context.Context) error // TODO: Experimental (Nov. 2023)
286 }
287
288 +var (
289 + ServerHeader = "Caddy"
290 + serverHeader = []string{ServerHeader}
291 +)
292 +
293 // ServeHTTP is the entry point for all HTTP requests.
294 func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
295 // If there are listener wrappers that process tls connections but don't return a *tls.Conn, this field will be nil.
@@ -294,16 +299,14 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
299 }
300 }
301
297 - w.Header().Set("Server", "Caddy")
302 + h := w.Header()
303 + h["Server"] = serverHeader
304
305 // advertise HTTP/3, if enabled
300 - if s.h3server != nil {
301 - if r.ProtoMajor < 3 {
302 - err := s.h3server.SetQUICHeaders(w.Header())
303 - if err != nil {
304 - if c := s.logger.Check(zapcore.ErrorLevel, "setting HTTP/3 Alt-Svc header"); c != nil {
305 - c.Write(zap.Error(err))
306 - }
306 + if s.h3server != nil && r.ProtoMajor < 3 {
307 + if err := s.h3server.SetQUICHeaders(h); err != nil {
308 + if c := s.logger.Check(zapcore.ErrorLevel, "setting HTTP/3 Alt-Svc header"); c != nil {
309 + c.Write(zap.Error(err))
310 }
311 }
312 }
@@ -328,9 +331,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
331 // enable full-duplex for HTTP/1, ensuring the entire
332 // request body gets consumed before writing the response
333 if s.EnableFullDuplex && r.ProtoMajor == 1 {
331 - //nolint:bodyclose
332 - err := http.NewResponseController(w).EnableFullDuplex()
333 - if err != nil {
334 + if err := http.NewResponseController(w).EnableFullDuplex(); err != nil { //nolint:bodyclose
335 if c := s.logger.Check(zapcore.WarnLevel, "failed to enable full duplex"); c != nil {
336 c.Write(zap.Error(err))
337 }
@@ -417,8 +418,7 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
418 var fields []zapcore.Field
419 if s.Errors != nil && len(s.Errors.Routes) > 0 {
420 // execute user-defined error handling route
420 - err2 := s.errorHandlerChain.ServeHTTP(w, r)
421 - if err2 == nil {
421 + if err2 := s.errorHandlerChain.ServeHTTP(w, r); err2 == nil {
422 // user's error route handled the error response
423 // successfully, so now just log the error
424 for _, logger := range errLoggers {