diff --git a/modules/caddyhttp/caddyhttp.go b/modules/caddyhttp/caddyhttp.go index 7f33c1dc0..693f41623 100644 --- a/modules/caddyhttp/caddyhttp.go +++ b/modules/caddyhttp/caddyhttp.go @@ -209,6 +209,7 @@ func (app *App) Start() error { go h3srv.Serve(h3ln) app.h3servers = append(app.h3servers, h3srv) app.h3listeners = append(app.h3listeners, h3ln) + srv.h3server = h3srv } ///////// } diff --git a/modules/caddyhttp/server.go b/modules/caddyhttp/server.go index e16a600c2..b4952e124 100644 --- a/modules/caddyhttp/server.go +++ b/modules/caddyhttp/server.go @@ -26,6 +26,7 @@ import ( "github.com/caddyserver/caddy/v2" "github.com/caddyserver/caddy/v2/modules/caddytls" + "github.com/lucas-clemente/quic-go/http3" ) // Server is an HTTP server. @@ -47,12 +48,21 @@ type Server struct { ExperimentalHTTP3 bool `json:"experimental_http3,omitempty"` tlsApp *caddytls.TLS + + h3server *http3.Server } // ServeHTTP is the entry point for all HTTP requests. func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { w.Header().Set("Server", "Caddy") + if s.h3server != nil { + err := s.h3server.SetQuicHeaders(w.Header()) + if err != nil { + log.Printf("[ERROR] Setting HTTP/3 Alt-Svc header: %v", err) + } + } + if s.tlsApp.HandleHTTPChallenge(w, r) { return }