Documentation
¶
Overview ¶
Package upstream provides utilities for propagating HTTP headers from incoming API requests to outbound toolset HTTP calls.
Index ¶
- func Handler(next http.Handler) http.Handler
- func HeadersFromContext(ctx context.Context) http.Header
- func NewHeaderTransport(base http.RoundTripper, headers map[string]string) http.RoundTripper
- func NewHeaderTransportForOrigin(base http.RoundTripper, origin string, headers map[string]string) http.RoundTripper
- func NewHeaderTransportWithResolver(base http.RoundTripper, headers map[string]string, resolve HeaderResolver) http.RoundTripper
- func NewHeaderTransportWithResolverForOrigin(base http.RoundTripper, origin string, headers map[string]string, ...) http.RoundTripper
- func ResolveHeaders(ctx context.Context, headers map[string]string) map[string]string
- func SameOrigin(rawURL string, target *url.URL) bool
- func WithHeaders(ctx context.Context, h http.Header) context.Context
- type HeaderResolver
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Handler ¶
Handler wraps an http.Handler to store the incoming HTTP request headers in the request context for downstream toolset forwarding.
func HeadersFromContext ¶
HeadersFromContext retrieves upstream HTTP headers from the context. Returns nil if no headers are present.
func NewHeaderTransport ¶
func NewHeaderTransport(base http.RoundTripper, headers map[string]string) http.RoundTripper
NewHeaderTransport wraps an http.RoundTripper to set custom headers. The first request pins the origin; redirects to another origin do not receive the configured headers.
func NewHeaderTransportForOrigin ¶ added in v1.118.0
func NewHeaderTransportForOrigin(base http.RoundTripper, origin string, headers map[string]string) http.RoundTripper
NewHeaderTransportForOrigin is like NewHeaderTransport, but pins the origin before the first request so a shared transport cannot be initialized by the wrong caller.
func NewHeaderTransportWithResolver ¶ added in v1.104.0
func NewHeaderTransportWithResolver(base http.RoundTripper, headers map[string]string, resolve HeaderResolver) http.RoundTripper
NewHeaderTransportWithResolver is like NewHeaderTransport but resolves the header values through resolve on every request.
func NewHeaderTransportWithResolverForOrigin ¶ added in v1.118.0
func NewHeaderTransportWithResolverForOrigin(base http.RoundTripper, origin string, headers map[string]string, resolve HeaderResolver) http.RoundTripper
NewHeaderTransportWithResolverForOrigin combines per-request resolution with an explicitly pinned origin.
func ResolveHeaders ¶
ResolveHeaders resolves ${headers.NAME} placeholders in header values using upstream headers from the context. Header names in the placeholder are case-insensitive, matching HTTP header convention.
For example, given the config header:
Authorization: ${headers.Authorization}
and an upstream request with "Authorization: Bearer token", the resolved value will be "Bearer token".
func SameOrigin ¶ added in v1.118.0
SameOrigin reports whether target has the same scheme, host, and effective port as rawURL.
Types ¶
type HeaderResolver ¶ added in v1.104.0
HeaderResolver resolves configured header values into the final values to set on an outbound request. It is invoked once per request with the request's context, so implementations can consult dynamic sources (e.g. upstream headers stored in the context, or environment providers backed by rotating credentials) without going stale on long-lived connections.