// ServeHTTP implements the method from interface http.Handler using the latest // handler available from getHandler() and latest ReverseProxy available from // getReverseProxy(). func (client *Client) ServeHTTP(resp http.ResponseWriter, req *http.Request) { logging.RegisterUserAgent(req.Header.Get("User-Agent")) if req.Method == httpConnectMethod { // CONNECT requests are often used for HTTPS requests. log.Tracef("Intercepting CONNECT %s", req.URL) client.intercept(resp, req) } else { // Direct proxying can only be used for plain HTTP connections. log.Tracef("Reverse proxying %s %v", req.Method, req.URL) client.getReverseProxy().ServeHTTP(resp, req) } }
// ServeHTTP implements the method from interface http.Handler using the latest // handler available from getHandler() and latest ReverseProxy available from // getReverseProxy(). func (client *Client) ServeHTTP(resp http.ResponseWriter, req *http.Request) { logging.RegisterUserAgent(req.Header.Get("User-Agent")) if req.Method == httpConnectMethod { // CONNECT requests are often used for HTTPS requests. log.Tracef("Intercepting CONNECT %s", req.URL) client.intercept(resp, req) } else if rp, ok := client.rp.Get(1 * time.Minute); ok { // Direct proxying can only be used for plain HTTP connections. log.Debugf("Reverse proxying %s %v", req.Method, req.URL) rp.(*httputil.ReverseProxy).ServeHTTP(resp, req) } else { log.Debugf("Could not get a reverse proxy connection -- responding bad gateway") respondBadGateway(resp, "Unable to get a connection") } }