Documentation ¶
Overview ¶
Package hmiddleware provides common HTTP middleware.
Index ¶
- func ACMEValidationMiddleware(validationURL *url.URL) func(http.Handler) http.Handler
- func CORS(next http.Handler) http.Handler
- func DisableKeepalive(next http.Handler) http.Handler
- func EnsureTLS(next http.Handler) http.Handler
- func PostRequestLogger(l logrus.FieldLogger) func(next http.Handler) http.Handler
- func PreRequestLogger(l logrus.FieldLogger) func(next http.Handler) http.Handler
- func RequestID(next http.Handler) http.Handler
- func Tags(next http.Handler) http.Handler
- type StructuredLogger
- type StructuredLoggerEntry
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ACMEValidationMiddleware ¶ added in v0.0.4
ACMEValidationMiddleware implements the HTTP01 based redirect protocol specific to heroku ACM.
func CORS ¶
CORS adds Cross-Origin Resource Sharing headers to all outgoing requests. This is known as something that is kind of hard to get right. See docs at https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS for more information.
Example ¶
r := chi.NewRouter() r.Use(CORS) // OR var h http.Handler //nolint: gosec if err := http.ListenAndServe(":"+os.Getenv("PORT"), CORS(h)); err != nil { log.Fatal(err) }
Output:
func DisableKeepalive ¶
DisableKeepalive instructs the Go HTTP stack to close the incoming HTTP connection once all requests processed by this middleware are complete.
Example ¶
r := chi.NewRouter() r.Use(DisableKeepalive) // OR var h http.Handler //nolint: gosec if err := http.ListenAndServe(":"+os.Getenv("PORT"), DisableKeepalive(h)); err != nil { log.Fatal(err) }
Output:
func EnsureTLS ¶
EnsureTLS ensures all incoming requests identify as having been proxied via https from the upstream reverse proxy. The way that this uses to check relies on the `X-Forwarded-Proto` header which is not defined by any formal standard. For more information on this header, see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-Proto.
Example ¶
r := chi.NewRouter() r.Use(EnsureTLS) // OR var h http.Handler //nolint: gosec if err := http.ListenAndServe(":"+os.Getenv("PORT"), EnsureTLS(h)); err != nil { log.Fatal(err) }
Output:
func PostRequestLogger ¶ added in v0.0.16
PostRequestLogger is a middleware for the github.com/sirupsen/logrus to log requests. It logs things similar to heroku logs and adds remote_addr and user_agent. If you are using Chi, consider using the RequestLogger middleware instead.
func PreRequestLogger ¶ added in v0.0.16
PreRequestLogger is a middleware for the github.com/sirupsen/logrus to log requests. It logs things similar to heroku logs and adds remote_addr and user_agent. If you are using Chi, consider using the RequestLogger middleware instead.
func Tags ¶ added in v0.0.20
Tags provides a middleware function for seeding the context with a per-request tags that are eventually retrieved and logged by the StructuredLogger
Example ¶
r := chi.NewRouter() r.Use(Tags) logger := logrus.StandardLogger() l := &StructuredLogger{ Logger: logger, } r.Use(middleware.RequestLogger(l)) r.Get("/", func(w http.ResponseWriter, r *http.Request) { // foo=bar will show up in the HTTP request logs generated by StructuredLogger tags.Extract(r.Context()).Set("foo", "bar") w.WriteHeader(http.StatusOK) })
Output:
Types ¶
type StructuredLogger ¶ added in v0.0.17
type StructuredLogger struct {
Logger logrus.FieldLogger
}
StructuredLogger implements the LogFormatter interface from Chi. LogFormatter initiates the beginning of a new LogEntry per request. See https://github.com/go-chi/chi/blob/708d187cdc2beff37b6835250dd574f395ebaa03/middleware/logger.go#L54 For an example of how to use this middleware to combine Logrus logging with the Chi router, see https://github.com/go-chi/chi/blob/cca4135d8dddff765463feaf1118047a9e506b4a/_examples/logging/main.go#L2
func (*StructuredLogger) NewLogEntry ¶ added in v0.0.17
func (l *StructuredLogger) NewLogEntry(r *http.Request) middleware.LogEntry
NewLogEntry creates a new LogEntry at the start of a request.
type StructuredLoggerEntry ¶ added in v0.0.17
type StructuredLoggerEntry struct { Logger logrus.FieldLogger // contains filtered or unexported fields }
StructuredLoggerEntry implements the LogEntry interface from Chi. LogEntry records the final log when a request completes. See https://github.com/go-chi/chi/blob/708d187cdc2beff37b6835250dd574f395ebaa03/middleware/logger.go#L60 For an example of how to use this middleware to combine Logrus logging with the Chi router, see https://github.com/go-chi/chi/blob/cca4135d8dddff765463feaf1118047a9e506b4a/_examples/logging/main.go#L2
func (*StructuredLoggerEntry) Panic ¶ added in v0.0.17
func (l *StructuredLoggerEntry) Panic(v interface{}, stack []byte)
Panic is called by Chi's Recoverer middleware. See https://github.com/go-chi/chi/blob/baf4ef5b139e284b297573d89daf587457153aa3/middleware/recoverer.go
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package httpmetrics provides middleware for collecting metrics about http servers.
|
Package httpmetrics provides middleware for collecting metrics about http servers. |