diff --git a/api_definition.go b/api_definition.go index f761639954e..a2be309db32 100644 --- a/api_definition.go +++ b/api_definition.go @@ -135,6 +135,7 @@ type APISpec struct { LastGoodHostList *apidef.HostList HasRun bool ServiceRefreshInProgress bool + HTTPTransport http.RoundTripper } // APIDefinitionLoader will load an Api definition from a storage diff --git a/reverse_proxy.go b/reverse_proxy.go index de9cfea26c0..36f3db2350e 100644 --- a/reverse_proxy.go +++ b/reverse_proxy.go @@ -436,8 +436,10 @@ func httpTransport(timeOut int, rw http.ResponseWriter, req *http.Request, p *Re func (p *ReverseProxy) WrappedServeHTTP(rw http.ResponseWriter, req *http.Request, withCache bool) *http.Response { // 1. Check if timeouts are set for this endpoint - _, timeout := p.CheckHardTimeoutEnforced(p.TykAPISpec, req) - transport := httpTransport(timeout, rw, req, p) + if p.TykAPISpec.HTTPTransport == nil { + _, timeout := p.CheckHardTimeoutEnforced(p.TykAPISpec, req) + p.TykAPISpec.HTTPTransport = httpTransport(timeout, rw, req, p) + } ctx := req.Context() if cn, ok := rw.(http.CloseNotifier); ok { @@ -525,14 +527,14 @@ func (p *ReverseProxy) WrappedServeHTTP(rw http.ResponseWriter, req *http.Reques p.ErrorHandler.HandleError(rw, logreq, "Service temporarily unnavailable.", 503) return nil } - res, err = transport.RoundTrip(outreq) + res, err = p.TykAPISpec.HTTPTransport.RoundTrip(outreq) if err != nil || res.StatusCode == 500 { breakerConf.CB.Fail() } else { breakerConf.CB.Success() } } else { - res, err = transport.RoundTrip(outreq) + res, err = p.TykAPISpec.HTTPTransport.RoundTrip(outreq) } if err != nil {