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 {