X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/b4e123604561174f928beab0f0a8fba7cbf2d33d..514fb685c9d835441e0911d9b9499952b6787095:/lib/controller/proxy.go diff --git a/lib/controller/proxy.go b/lib/controller/proxy.go index 9aecdc1b2c..9eac9362c9 100644 --- a/lib/controller/proxy.go +++ b/lib/controller/proxy.go @@ -5,18 +5,15 @@ package controller import ( - "context" "io" "net/http" "net/url" - "time" "git.curoverse.com/arvados.git/sdk/go/httpserver" ) type proxy struct { - Name string // to use in Via header - RequestTimeout time.Duration + Name string // to use in Via header } type HTTPError struct { @@ -28,25 +25,29 @@ func (h HTTPError) Error() string { return h.Message } -// headers that shouldn't be forwarded when proxying. See -// https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers var dropHeaders = map[string]bool{ + // Headers that shouldn't be forwarded when proxying. See + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers "Connection": true, "Keep-Alive": true, "Proxy-Authenticate": true, "Proxy-Authorization": true, - "TE": true, - "Trailer": true, - "Transfer-Encoding": true, // *-Encoding headers interfer with Go's automatic compression/decompression - "Content-Encoding": true, + // (comment/space here makes gofmt1.10 agree with gofmt1.11) + "TE": true, + "Trailer": true, + "Upgrade": true, + + // Headers that would interfere with Go's automatic + // compression/decompression if we forwarded them. "Accept-Encoding": true, - "Upgrade": true, + "Content-Encoding": true, + "Transfer-Encoding": true, } type ResponseFilter func(*http.Response, error) (*http.Response, error) -// Forward a request to downstream service, and return response or error. -func (p *proxy) ForwardRequest( +// Forward a request to upstream service, and return response or error. +func (p *proxy) Do( reqIn *http.Request, urlOut *url.URL, client *http.Client) (*http.Response, error) { @@ -69,25 +70,19 @@ func (p *proxy) ForwardRequest( } hdrOut.Add("Via", reqIn.Proto+" arvados-controller") - ctx := reqIn.Context() - if p.RequestTimeout > 0 { - var cancel context.CancelFunc - ctx, cancel = context.WithDeadline(ctx, time.Now().Add(time.Duration(p.RequestTimeout))) - defer cancel() - } - reqOut := (&http.Request{ Method: reqIn.Method, URL: urlOut, Host: reqIn.Host, Header: hdrOut, Body: reqIn.Body, - }).WithContext(ctx) + }).WithContext(reqIn.Context()) - return client.Do(reqOut) + resp, err := client.Do(reqOut) + return resp, err } -// Copy a response (or error) to the upstream client +// Copy a response (or error) to the downstream client func (p *proxy) ForwardResponse(w http.ResponseWriter, resp *http.Response, err error) (int64, error) { if err != nil { if he, ok := err.(HTTPError); ok {