This is a fork of the Gorilla handlers repository. We will try to keep this repo in sync with upstream changes while merging all those pull requests that can be useful.
Package handlers is a collection of handlers (aka "HTTP middleware") for use
with Go's net/http
package (or any framework supporting http.Handler
), including:
- LoggingHandler for logging HTTP requests in the Apache Common Log Format.
- CombinedLoggingHandler for logging HTTP requests in the Apache Combined Log Format commonly used by both Apache and nginx.
- CompressHandler for gzipping responses.
- ContentTypeHandler for validating requests against a list of accepted content types.
- MethodHandler for matching HTTP methods against handlers in a
map[string]http.Handler
- ProxyHeaders for populating
r.RemoteAddr
andr.URL.Scheme
based on theX-Forwarded-For
,X-Real-IP
,X-Forwarded-Proto
and RFC7239Forwarded
headers when running a Go server behind a HTTP reverse proxy. - CanonicalHost for re-directing to the preferred host when handling multiple domains (i.e. multiple CNAME aliases).
- RecoveryHandler for recovering from unexpected panics.
Other handlers are documented on the Gorilla website.
A simple example using handlers.LoggingHandler
and handlers.CompressHandler
:
import (
"net/http"
"github.com/gorilla/handlers"
)
func main() {
r := http.NewServeMux()
// Only log requests to our admin dashboard to stdout
r.Handle("/admin", handlers.LoggingHandler(os.Stdout, http.HandlerFunc(ShowAdminDashboard)))
r.HandleFunc("/", ShowIndex)
// Wrap our server with our gzip handler to gzip compress all responses.
http.ListenAndServe(":8000", handlers.CompressHandler(r))
}
BSD licensed. See the included LICENSE file for details.