/h2c

Golang HTTP/2 cleartext (h2c) Handler / Router / Mux

Primary LanguageGoMozilla Public License 2.0MPL-2.0

h2c

Golang HTTP/2 cleartext (h2c) Handler / Router / Mux

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()
}