routeRequest(req, res) {
        monitoringClient.httpActiveRequests.inc();
        const requestStartTime = process.hrtime.bigint();

        // disable nagle algorithm
        req.socket.setNoDelay();
        res.on('close', () => {
            // this is tested by retrieveData
            // eslint-disable-next-line no-param-reassign
            res.isclosed = true;
        });

        const monitorEndOfRequest = () => {
            const responseTimeInNs = Number(process.hrtime.bigint() - requestStartTime);
            const labels = {
                method: req.method,
                code: res.statusCode,
            };
            if (req.apiMethod) {
                labels.action = req.apiMethod;
            }
            monitoringClient.httpRequestsTotal.labels(labels).inc();
            monitoringClient.httpRequestDurationSeconds
                .labels(labels)
                .observe(responseTimeInNs / 1e9);
            monitoringClient.httpActiveRequests.dec();
        };
        res.on('close', monitorEndOfRequest);

        // use proxied hostname if needed
        if (req.headers['x-target-host']) {
            // eslint-disable-next-line no-param-reassign
            req.headers.host = req.headers['x-target-host'];
        }

        const params = {
            api,
            internalHandlers,
            statsClient,
            allEndpoints,
            websiteEndpoints,
            blacklistedPrefixes,
            dataRetrievalParams: {
                client,
                implName,
                config: this.config,
                kms,
                metadata,
                locStorageCheckFn: locationStorageCheck,
                vault,
            },
        };
        arsenal.s3routes.routes(req, res, params, logger, this.config);
    }
Route requests on 's3' port
@param {http.IncomingMessage} req - http request object
@param {http.ServerResponse} res - http response object
@returns {undefined}