2023-12-22 09:23:09 +00:00
# gorilla/handlers
![Testing ](https://github.com/gorilla/handlers/actions/workflows/test.yml/badge.svg )
[![Codecov ](https://codecov.io/github/gorilla/handlers/branch/main/graph/badge.svg )](https://codecov.io/github/gorilla/handlers)
2020-09-01 03:48:55 +00:00
[![GoDoc ](https://godoc.org/github.com/gorilla/handlers?status.svg )](https://godoc.org/github.com/gorilla/handlers)
[![Sourcegraph ](https://sourcegraph.com/github.com/gorilla/handlers/-/badge.svg )](https://sourcegraph.com/github.com/gorilla/handlers?badge)
2017-04-10 19:07:32 +00:00
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:
2020-09-01 03:48:55 +00:00
* [**LoggingHandler** ](https://godoc.org/github.com/gorilla/handlers#LoggingHandler ) for logging HTTP requests in the Apache [Common Log
2017-04-10 19:07:32 +00:00
Format](http://httpd.apache.org/docs/2.2/logs.html#common).
2020-09-01 03:48:55 +00:00
* [**CombinedLoggingHandler** ](https://godoc.org/github.com/gorilla/handlers#CombinedLoggingHandler ) for logging HTTP requests in the Apache [Combined Log
2017-04-10 19:07:32 +00:00
Format](http://httpd.apache.org/docs/2.2/logs.html#combined) commonly used by
both Apache and nginx.
2020-09-01 03:48:55 +00:00
* [**CompressHandler** ](https://godoc.org/github.com/gorilla/handlers#CompressHandler ) for gzipping responses.
* [**ContentTypeHandler** ](https://godoc.org/github.com/gorilla/handlers#ContentTypeHandler ) for validating requests against a list of accepted
2017-04-10 19:07:32 +00:00
content types.
2020-09-01 03:48:55 +00:00
* [**MethodHandler** ](https://godoc.org/github.com/gorilla/handlers#MethodHandler ) for matching HTTP methods against handlers in a
2017-04-10 19:07:32 +00:00
`map[string]http.Handler`
2020-09-01 03:48:55 +00:00
* [**ProxyHeaders** ](https://godoc.org/github.com/gorilla/handlers#ProxyHeaders ) for populating `r.RemoteAddr` and `r.URL.Scheme` based on the
2017-04-10 19:07:32 +00:00
`X-Forwarded-For` , `X-Real-IP` , `X-Forwarded-Proto` and RFC7239 `Forwarded`
headers when running a Go server behind a HTTP reverse proxy.
2020-09-01 03:48:55 +00:00
* [**CanonicalHost** ](https://godoc.org/github.com/gorilla/handlers#CanonicalHost ) for re-directing to the preferred host when handling multiple
2017-04-10 19:07:32 +00:00
domains (i.e. multiple CNAME aliases).
2020-09-01 03:48:55 +00:00
* [**RecoveryHandler** ](https://godoc.org/github.com/gorilla/handlers#RecoveryHandler ) for recovering from unexpected panics.
2017-04-10 19:07:32 +00:00
Other handlers are documented [on the Gorilla
2020-09-01 03:48:55 +00:00
website](https://www.gorillatoolkit.org/pkg/handlers).
2017-04-10 19:07:32 +00:00
## Example
A simple example using `handlers.LoggingHandler` and `handlers.CompressHandler` :
```go
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))
}
```
## License
BSD licensed. See the included LICENSE file for details.