From fe389fcbd7c3b8c64167d317b31adf7b98147fa8 Mon Sep 17 00:00:00 2001 From: Matthew Holt Date: Wed, 11 Sep 2019 18:49:21 -0600 Subject: [PATCH] http: Set Alt-Svc header if experimental HTTP3 server is enabled --- modules/caddyhttp/caddyhttp.go | 1 + modules/caddyhttp/server.go | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/modules/caddyhttp/caddyhttp.go b/modules/caddyhttp/caddyhttp.go index 7f33c1dc..693f4162 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 e16a600c..b4952e12 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 }