In #6778 we found that AWS forwards HTTP headers to Lambdas from clients without modifying their casing. Since users are relying on this behavior, it effectively renders a web server that lowercases headers unusable as proxy for localstack. In general, I think there is a case to be made that web servers should not manipulate the casing of request headers, so that they can function as application-layer proxy to backends that make assumptions about header casing.

The issue of header casing for HTTP/1.1 in hypercorn was addressed with https://github.com/pgjones/hypercorn/issues/66, but later reverted with https://github.com/pgjones/hypercorn/issues/77. Apparently the relevant ASGI spec is being discussed here https://github.com/django/asgiref/issues/246 where I think we should make that case.

If this is a fundamental limitation of ASGI and we cannot get this into hypercorn, then we will be forced to either
- apologize to lambda users and tell them that they need to re-write their lambda code in a way that treats headers in a case-insensitive way
- fork hypercorn and maintain our own version
- use another webserver that does not manipulate HTTP headers, or at least allows access to the raw headers in some way
self, gateway: Gateway, port: int, bind_address: str | list[str], use_ssl: bool = False
    ):
        """
        Creates a new GatewayServer instance.
        :param gateway: which will be served by this server
        :param port: defining the port of this server instance
        :param bind_address: to bind this server instance to. Can be a host string or a list of host strings.
        :param use_ssl: True if the LocalStack cert should be loaded and HTTP/HTTPS multiplexing should be enabled.
        """
        
        config = Config()
        setup_hypercorn_logger(config)
        bind_address = ensure_list(bind_address)
        config.bind = [f"{addr}:{port}" for addr in bind_address]
        if use_ssl:
            install_predefined_cert_if_available()
            _, cert_file_name, key_file_name = create_ssl_cert(serial_number=port)
            config.certfile = cert_file_name
            config.keyfile = key_file_name
        
        loop = asyncio.new_event_loop()
        app = AsgiGateway(gateway, event_loop=loop)
        
        super().__init__(app, config, loop)
    def do_shutdown(self):
        super().do_shutdown()
        self.app.close()  
class ProxyServer(GatewayServer):