The h2c protocol is the non-TLS secured version of HTTP/2 which is not available from net/http.
Code is a copy of Traefik's h2c server, but adapted for standalone usage as an http.Handler.
Traefik can be found here: https://github.com/containous/traefik
Please do not use this library unless you know what you are doing, and you have an appropriate use case such as a secure load balancer that terminates SSL before sending h2c traffic to servers within a private subnet.
Example usage:
package main
import (
"fmt"
"net/http"
"github.com/veqryn/h2c"
"golang.org/x/net/http2"
)
func main() {
// Router/Mux (can use any http.Handler)
router := http.NewServeMux()
// Handlers...
router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World")
})
// Wrap the Router
h2cWrapper := &h2c.HandlerH2C{
Handler: router,
H2Server: &http2.Server{},
}
// Server
srv := http.Server{
Addr: ":8080",
Handler: h2cWrapper,
}
srv.ListenAndServe()
}