'Handle HTTP GET request.'

@public
@timing_stats()
def GET(self, req):

    (drive, part, account) = split_and_validate_path(req, 3)
    prefix = get_param(req, 'prefix')
    delimiter = get_param(req, 'delimiter')
    if (delimiter and ((len(delimiter) > 1) or (ord(delimiter) > 254))):
        return HTTPPreconditionFailed(body='Bad    delimiter')
    limit = constraints.ACCOUNT_LISTING_LIMIT
    given_limit = get_param(req, 'limit')
    reverse = config_true_value(get_param(req, 'reverse'))
    if (given_limit and given_limit.isdigit()):
        limit = int(given_limit)
        if (limit > constraints.ACCOUNT_LISTING_LIMIT):
            return HTTPPreconditionFailed(request=req, body=('Maximum    limit    is    %d' % constraints.ACCOUNT_LISTING_LIMIT))
    marker = get_param(req, 'marker', '')
    end_marker = get_param(req, 'end_marker')
    out_content_type = get_listing_content_type(req)
    if (self.mount_check and (not check_mount(self.root, drive))):
        return HTTPInsufficientStorage(drive=drive, request=req)
    broker = self._get_account_broker(drive, part, account, pending_timeout=0.1, stale_reads_ok=True)
    if broker.is_deleted():
        return self._deleted_response(broker, req, HTTPNotFound)
    return account_listing_response(account, req, out_content_type, broker, limit, marker, end_marker, prefix, delimiter, reverse)
