code: private void executeProxyRequest(HttpMethod httpMethodProxyRequest,
                                       HttpServletRequest httpServletRequest,
                                       HttpServletResponse httpServletResponse, History history) {
          try {
              RequestInformation requestInfo = requestInformation.get();
  
              // Execute the request
  
              // set virtual host so the server knows how to direct the request
              // If the host header exists then this uses that value
              // Otherwise the hostname from the URL is used
              processVirtualHostName(httpMethodProxyRequest, httpServletRequest);
              cullDisabledPaths();
  
              // check for existence of ODO_PROXY_HEADER
              // finding it indicates a bad loop back through the proxy
              if (httpServletRequest.getHeader(Constants.ODO_PROXY_HEADER) != null) {
                  logger.error("Request has looped back into the proxy.  This will not be executed: {}", httpServletRequest.getRequestURL());
                  return;
              }
  
              // set ODO_PROXY_HEADER
              httpMethodProxyRequest.addRequestHeader(Constants.ODO_PROXY_HEADER, "proxied");
  
              requestInfo.blockRequest = hasRequestBlock();
              PluginResponse responseWrapper = new PluginResponse(httpServletResponse);
              requestInfo.jsonpCallback = stripJSONPToOutstr(httpServletRequest, responseWrapper);
  
              if (!requestInfo.blockRequest) {
                  logger.info("Sending request to server");
  
                  history.setModified(requestInfo.modified);
                  history.setRequestSent(true);
  
                  executeRequest(httpMethodProxyRequest,
                                 httpServletRequest,
                                 responseWrapper,
                                 history);
              } else {
                  history.setRequestSent(false);
              }
  
              logOriginalResponseHistory(responseWrapper, history);
              applyResponseOverrides(responseWrapper, httpServletRequest, httpMethodProxyRequest, history);
              // store history
              history.setModified(requestInfo.modified);
              logRequestHistory(httpMethodProxyRequest, responseWrapper, history);
  
              writeResponseOutput(responseWrapper, requestInfo.jsonpCallback);
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
docs: Execute a request through Odo processing
  
  @param httpMethodProxyRequest
  @param httpServletRequest
  @param httpServletResponse
  @param history