mirror of
				https://github.com/containers/podman.git
				synced 2025-10-31 18:08:51 +08:00 
			
		
		
		
	 deaf969243
			
		
	
	deaf969243
	
	
	
		
			
			* To aid in debugging log API request and response bodies at trace level. Events can be correlated using the X-Reference-Id. * Server now echos X-Reference-Id from client if set, otherwise generates an unique id. * Move logic for X-Reference-Id into middleware * Change uses of Header.Add() to Set() when setting Content-Type * Log API operations in Apache format using gorilla middleware * Port server code to use BaseContext and ConnContext Fixes #10053 Signed-off-by: Jhon Honce <jhonce@redhat.com>
gorilla/handlers
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:
- LoggingHandlerfor logging HTTP requests in the Apache Common Log Format.
- CombinedLoggingHandlerfor logging HTTP requests in the Apache Combined Log Format commonly used by both Apache and nginx.
- CompressHandlerfor gzipping responses.
- ContentTypeHandlerfor validating requests against a list of accepted content types.
- MethodHandlerfor matching HTTP methods against handlers in a- map[string]http.Handler
- ProxyHeadersfor populating- r.RemoteAddrand- r.URL.Schemebased on the- X-Forwarded-For,- X-Real-IP,- X-Forwarded-Protoand RFC7239- Forwardedheaders when running a Go server behind a HTTP reverse proxy.
- CanonicalHostfor re-directing to the preferred host when handling multiple domains (i.e. multiple CNAME aliases).
Other handlers are documented on the Gorilla website.
Example
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))
}
License
BSD licensed. See the included LICENSE file for details.