httpOnMessageHandler(response, request) {
    const connection = new ClientConnection(
      "HTTP/1.1",
      getHttpIps(response, request),
      request.headers,
    );
    const message = new HttpMessage(connection, request);

    debugHTTP("[%s] Received HTTP request: %a", connection.id, message);

    if (message.headers["content-length"] > this.maxRequestSize) {
      this.httpSendError(message, response, HTTP_REQUEST_TOO_LARGE_ERROR);
      return;
    }

    const contentTypeHeader = message.headers["content-type"];

    if (contentTypeHeader) {
      const contentTypeParamIndex = contentTypeHeader.indexOf(";");
      const contentType =
        contentTypeParamIndex !== -1
          ? contentTypeHeader.slice(0, contentTypeParamIndex).trim()
          : contentTypeHeader.trim();

      if (
        !this.httpConfig.opts.allowedContentTypes.some(
          (allowed) => contentType === allowed,
        )
      ) {
        this.httpSendError(
          message,
          response,
          kerrorHTTP.get("unsupported_content", contentType),
        );
        return;
      }
    }

    const encoding = CHARSET_REGEX.exec(contentTypeHeader);

    if (encoding !== null && encoding[1].toLowerCase() !== "utf-8") {
      this.httpSendError(
        message,
        response,
        kerrorHTTP.get("unsupported_charset", encoding[1].toLowerCase()),
      );
      return;
    }

    this.httpReadData(message, response, (err) => {
      if (err) {
        this.httpSendError(message, response, err);
        return;
      }

      this.httpProcessRequest(response, message);
    });
  }
@param  {uWS.HttpResponse} response
@param  {uWS.HttpRequest} request