'Base handler for HTTP GET or HEAD requests.
:param req: swob.Request object
:param server_type: server type used in logging
:param node_iter: an iterator to obtain nodes from
:param partition: partition
:param path: path for the request
:param concurrency: number of requests to run concurrently
:param client_chunk_size: chunk size for response body iterator
:returns: swob.Response object'

def GETorHEAD_base(self, req, server_type, node_iter, partition, path, concurrency=1, client_chunk_size=None):

    backend_headers = self.generate_request_headers(req, additional=req.headers)
    handler = GetOrHeadHandler(self.app, req, self.server_type, node_iter, partition, path, backend_headers, concurrency, client_chunk_size=client_chunk_size)
    res = handler.get_working_response(req)
    if (not res):
        res = self.best_response(req, handler.statuses, handler.reasons, handler.bodies, ('%s    %s' % (server_type, req.method)), headers=handler.source_headers)
    if (('X-Backend-Storage-Policy-Index' in res.headers) and is_success(res.status_int)):
        policy = POLICIES.get_by_index(res.headers['X-Backend-Storage-Policy-Index'])
        if policy:
            res.headers['X-Storage-Policy'] = policy.name
        else:
            self.app.logger.error('Could    not    translate    %s    (%r)    from    %r    to    policy', 'X-Backend-Storage-Policy-Index', res.headers['X-Backend-Storage-Policy-Index'], path)
    return res
