docs: @Override
      public String getVirtualHost() {
          if (null != this.sUrlHost) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "getVirtualHost: url host-> " + this.sUrlHost);
              }
              return this.sUrlHost;
          }
          // check for preparsed Host header value
          if (null != this.sHdrHost) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "getVirtualHost: hdr host-> " + this.sHdrHost);
              }
              return this.sHdrHost;
          }
          // otherwise need to review the Host header value
          String host = getHeader(HttpHeaderKeys.HDR_HOST).asString();
          // PK09940 handle empty string too
          if (null == host || 0 >= host.length()) {
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "getVirtualHost: No host header: [" + host + "]");
              }
              return null;
          }
          int index = -1;
          if (LEFT_BRACKET == host.charAt(0)) {
              // IPv6 IP
              index = host.indexOf(RIGHT_BRACKET);
              if (-1 == index) {
                  // invalid IP
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "getVirtualHost: Invalid IPv6 IP, missing right bracket");
                  }
                  return null;
              }
              index++; // keep the right bracket
          } else {
              index = host.indexOf(COLON);
          }
          if (-1 != index) {
              host = host.substring(0, index);
          }
          // PK14634 - cache the parsed host
          this.sHdrHost = host;
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "getVirtualHost: " + host);
          }
          return host;
      }