zhttpzgo.at/zhttp/mware Index | Files

package mware

import "zgo.at/zhttp/mware"

Package mware contains HTTP middlewares.

See e.g. chi for some additional middlewares.

Index

Variables

var DefaultHeaders = http.Header{
	"Strict-Transport-Security": []string{"max-age=7776000"},
	"X-Frame-Options":           []string{"deny"},
	"X-Content-Type-Options":    []string{"nosniff"},
}

DefaultHeaders will be set by default.

Functions

func Delay

func Delay(d time.Duration) func(http.Handler) http.Handler

Delay adds a delay before every request.

The default delay is taken from the paramters (which may be 0), and can also be overriden by setting a "debug-delay" cookie, which is in seconds.

This is intended for debugging frontend timing issues.

func Headers

func Headers(h http.Header) func(next http.Handler) http.Handler

Headers sets the given headers.

DefaultHeaders will always be set. Headers passed to this function overrides them. Use a nil value to remove a header.

func NoCache

func NoCache() func(http.Handler) http.Handler

NoCache sets the Cache-Control header to "no-cache".

Browsers will always validate a cache (with e.g. If-Match or If-None-Match). It does NOT tell browsers to never store a cache (use NoStore for that).

func NoStore

func NoStore() func(http.Handler) http.Handler

NoStore sets the Cache-Control header to "no-store, no-cache"

Browsers will never store a local copy (the no-cache is there to be sure previously stored copies from before this header are revalidated).

func RealIP

func RealIP(never ...string) func(http.Handler) http.Handler

RealIP sets the RemoteAddr to CF-Connecting-IP, Fly-Client-IP, X-Azure-SocketIP, X-Real-IP, X-Forwarded-For, or the RemoteAddr without a port.

The end result willl never have a source port set. It will ignore local and private addresses such as 127.0.0.1, 192.168.1.1, etc.

TODO: allow configuring which headers to look at, as this is very much dependent on the specific configuration; preferring e.g. Fly-Client-Ip means its trivial to spoof the "real IP".

func RequestLog

func RequestLog(opt *RequestLogOptions, printer RequestLogPrinter, ignore ...string) func(http.Handler) http.Handler

RequestLog logs all requests to stdout.

Any paths matching ignore will not be printed.

func Unpanic

func Unpanic(filterStack ...string) func(http.Handler) http.Handler

Unpanic recovers from panics in handlers and calls ErrPage().

func With

func With(handler http.Handler, wares ...func(http.Handler) http.Handler) http.Handler

TODO: put in zhttp

func WrapWriter

func WrapWriter() func(http.Handler) http.Handler

WrapWriter replaces the http.ResponseWriter with our version of http.ResponseWriter for some additional functionality.

Types

type RequestLogOptions

type RequestLogOptions struct {
	Host    bool   // Print Host: as well
	TimeFmt string // Time format; default is just the time.
}

type RequestLogPrinter

type RequestLogPrinter func(r *http.Request, url string, status int, start time.Time, opt *RequestLogOptions)

Source Files

cache.go delay.go doc.go headers.go realip.go reqlog.go unpanic.go with.go writer.go

Version
v0.0.0-20250319003001-8a233272ce7e (latest)
Published
Mar 19, 2025
Platform
darwin/amd64
Imports
12 packages
Last checked
17 hours ago

Tools for package owners.