Version: v2.0.0-alpha.2 Latest Latest

This package is not in the latest version of its module.

Go to latest
Published: Jan 7, 2021 License: Apache-2.0 Imports: 15 Imported by: 0



Package forward implements http handler that forwards requests to remote server and serves back the response websocket proxying support based on



View Source
const (
	StateConnected = iota

Connection states

View Source
const (
	XForwardedProto        = "X-Forwarded-Proto"
	XForwardedFor          = "X-Forwarded-For"
	XForwardedHost         = "X-Forwarded-Host"
	XForwardedPort         = "X-Forwarded-Port"
	XForwardedServer       = "X-Forwarded-Server"
	XRealIp                = "X-Real-Ip"
	Connection             = "Connection"
	KeepAlive              = "Keep-Alive"
	ProxyAuthenticate      = "Proxy-Authenticate"
	ProxyAuthorization     = "Proxy-Authorization"
	Te                     = "Te" // canonicalized version of "TE"
	Trailers               = "Trailers"
	TransferEncoding       = "Transfer-Encoding"
	Upgrade                = "Upgrade"
	ContentLength          = "Content-Length"
	SecWebsocketKey        = "Sec-Websocket-Key"
	SecWebsocketVersion    = "Sec-Websocket-Version"
	SecWebsocketExtensions = "Sec-Websocket-Extensions"
	SecWebsocketAccept     = "Sec-Websocket-Accept"



HopHeaders Hop-by-hop headers. These are removed when sent to the backend. Copied from reverseproxy.go, too bad

WebsocketDialHeaders Websocket dial headers

WebsocketUpgradeHeaders Websocket upgrade headers

XHeaders X-* headers


func BufferPool

func BufferPool(pool httputil.BufferPool) optSetter

BufferPool specifies a buffer pool for httputil.ReverseProxy.

func ErrorHandler

func ErrorHandler(h utils.ErrorHandler) optSetter

ErrorHandler is a functional argument that sets error handler of the server

func IsWebsocketRequest

func IsWebsocketRequest(req *http.Request) bool

IsWebsocketRequest determines if the specified HTTP request is a websocket handshake request

func Logger

func Logger(l utils.Logger) optSetter

Logger defines the logger the forwarder will use.

func PassHostHeader

func PassHostHeader(b bool) optSetter

PassHostHeader specifies if a client's Host header field should be delegated

func ResponseModifier

func ResponseModifier(responseModifier func(*http.Response) error) optSetter

ResponseModifier defines a response modifier for the HTTP forwarder

func Rewriter

func Rewriter(r ReqRewriter) optSetter

Rewriter defines a request rewriter for the HTTP forwarder

func RoundTripper

func RoundTripper(r http.RoundTripper) optSetter

RoundTripper sets a new http.RoundTripper Forwarder will use http.DefaultTransport as a default round tripper

func StateListener

func StateListener(stateListener UrlForwardingStateListener) optSetter

StateListener defines a state listener for the HTTP forwarder

func Stream

func Stream(stream bool) optSetter

Stream specifies if HTTP responses should be streamed.

func StreamingFlushInterval

func StreamingFlushInterval(flushInterval time.Duration) optSetter

StreamingFlushInterval defines a streaming flush interval for the HTTP forwarder

func WebsocketConnectionClosedHook

func WebsocketConnectionClosedHook(hook func(req *http.Request, conn net.Conn)) optSetter

WebsocketConnectionClosedHook defines a hook called when websocket connection is closed

func WebsocketTLSClientConfig

func WebsocketTLSClientConfig(tcc *tls.Config) optSetter

WebsocketTLSClientConfig define the websocker client TLS configuration


type ErrorHandlingRoundTripper

type ErrorHandlingRoundTripper struct {
	// contains filtered or unexported fields

ErrorHandlingRoundTripper a error handling round tripper

func (ErrorHandlingRoundTripper) RoundTrip

func (rt ErrorHandlingRoundTripper) RoundTrip(req *http.Request) (*http.Response, error)

RoundTrip executes the round trip

type Forwarder

type Forwarder struct {
	// contains filtered or unexported fields

Forwarder wraps two traffic forwarding implementations: HTTP and websockets. It decides based on the specified request which implementation to use

func New

func New(setters ...optSetter) (*Forwarder, error)

New creates an instance of Forwarder based on the provided list of configuration options

func (*Forwarder) ServeHTTP

func (f *Forwarder) ServeHTTP(w http.ResponseWriter, req *http.Request)

ServeHTTP decides which forwarder to use based on the specified request and delegates to the proper implementation

type HeaderRewriter

type HeaderRewriter struct {
	TrustForwardHeader bool
	Hostname           string

HeaderRewriter is responsible for removing hop-by-hop headers and setting forwarding headers

func (*HeaderRewriter) Rewrite

func (rw *HeaderRewriter) Rewrite(req *http.Request)

Rewrite rewrite request headers

type ReqRewriter

type ReqRewriter interface {
	Rewrite(r *http.Request)

ReqRewriter can alter request headers and body

type UrlForwardingStateListener

type UrlForwardingStateListener func(*url.URL, int)

UrlForwardingStateListener URL forwarding state listener

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL