code: def process_request(
          self, path: str, request_headers: Headers
      ) -> Union[Optional[HTTPResponse], Awaitable[Optional[HTTPResponse]]]:
          
          if self._process_request is not None:
              return self._process_request(path, request_headers)
          return None
docs: Intercept the HTTP request and return an HTTP response if needed.
  
          ``request_headers`` is a :class:`~websockets.http.Headers` instance.
  
          If this method returns ``None``, the WebSocket handshake continues.
          If it returns a status code, headers and a response body, that HTTP
          response is sent and the connection is closed.
  
          The HTTP status must be a :class:`~http.HTTPStatus`.
  
          HTTP headers must be a :class:`~websockets.http.Headers` instance, a
          :class:`~collections.abc.Mapping`, or an iterable of ``(name, value)``
          pairs.
  
          The HTTP response body must be :class:`bytes`. It may be empty.
  
          This method may be overridden to check the request headers and set a
          different status, for example to authenticate the request and return
          ``HTTPStatus.UNAUTHORIZED`` or ``HTTPStatus.FORBIDDEN``.
  
          It can be declared as a function or as a coroutine because such
          authentication checks are likely to require network requests.
  
          It may also be overridden by passing a ``process_request`` argument to
          the :class:`WebSocketServerProtocol` constructor or the :func:`serve`
          function.