async def METHOD_NAME(self, req):
    method = getattr(self.session, req.method.lower())
    upstream_url = self.next_url + req.path
    headers = req.headers.copy()
    query = req.query
    try:
        # note that req.content is a StreamReader, so the data is streamed
        # and not fully loaded in memory (unlike with python-requests)
        async with method(upstream_url,
                          headers=headers,
                          params=query,
                          allow_redirects=False,
                          data=req.content) as request:
            response = aiohttp.web.StreamResponse(
                status=request.status, headers=request.headers)
            writer = await response.prepare(req)
            while True:
                chunk = await request.content.readany()
                if not chunk:
                    break
                # using writer.write instead of response.write saves a few checks
                await writer.write(chunk)
            return response
    except aiohttp.ClientConnectionError as e:
        return self.connection_error(e)