v1.4.2 Latest Latest

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

Go to latest
Published: Nov 4, 2022 License: Apache-2.0 Imports: 16 Imported by: 259



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 log.FieldLogger) optSetter

Logger defines the logger the forwarder will use.

It defaults to logrus.StandardLogger(), the global logger used by logrus.

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 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 OxyLogger

type OxyLogger interface {
	GetLevel() log.Level

OxyLogger interface of the internal.

type ReqRewriter

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

ReqRewriter can alter request headers and body.

type URLForwardingStateListener added in v1.4.0

type URLForwardingStateListener func(*url.URL, int)

URLForwardingStateListener URL forwarding state listener.

type UrlForwardingStateListener

type UrlForwardingStateListener = URLForwardingStateListener

UrlForwardingStateListener alias on URLForwardingStateListener. Deprecated: use URLForwardingStateListener instead.

Jump to

Keyboard shortcuts

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