diff --git a/aws_lambda_powertools/event_handler/api_gateway.py b/aws_lambda_powertools/event_handler/api_gateway.py index 0c4553f182f..be74ece69ea 100644 --- a/aws_lambda_powertools/event_handler/api_gateway.py +++ b/aws_lambda_powertools/event_handler/api_gateway.py @@ -916,8 +916,14 @@ def _has_compression_enabled( bool True if compression is enabled and the "gzip" encoding is accepted, False otherwise. """ - encoding = event.headers.get("accept-encoding", "") - if "gzip" in encoding: + encoding = event.resolved_headers_field.get("accept-encoding", "") + gzip_accepted = False + if isinstance(encoding, str): + gzip_accepted = "gzip" in encoding + elif isinstance(encoding, list): + gzip_accepted = "gzip" in ",".join(encoding) + + if gzip_accepted: if response_compression is not None: return response_compression # e.g., Response(compress=False/True)) if route_compression: diff --git a/tests/functional/event_handler/_pydantic/test_openapi_swagger.py b/tests/functional/event_handler/_pydantic/test_openapi_swagger.py index b3a40e0dc8f..24d89fcb4ad 100644 --- a/tests/functional/event_handler/_pydantic/test_openapi_swagger.py +++ b/tests/functional/event_handler/_pydantic/test_openapi_swagger.py @@ -26,7 +26,7 @@ def test_openapi_swagger(): def test_openapi_swagger_compressed(): app = APIGatewayRestResolver(enable_validation=True) app.enable_swagger(compress=True) - LOAD_GW_EVENT["headers"] = {"Accept-Encoding": "gzip, deflate, br"} + LOAD_GW_EVENT["multiValueHeaders"] = {"Accept-Encoding": ["gzip, deflate, br"]} LOAD_GW_EVENT["path"] = "/swagger" result = app(LOAD_GW_EVENT, {}) assert result["statusCode"] == 200 diff --git a/tests/functional/event_handler/required_dependencies/test_api_gateway.py b/tests/functional/event_handler/required_dependencies/test_api_gateway.py index f2fc514a308..8b1222fb92d 100644 --- a/tests/functional/event_handler/required_dependencies/test_api_gateway.py +++ b/tests/functional/event_handler/required_dependencies/test_api_gateway.py @@ -464,12 +464,20 @@ def handler(event, context): assert result["multiValueHeaders"].get("Content-Encoding") is None -def test_response_with_compress_enabled(): +@pytest.mark.parametrize( + "headers", + [ + {"headers": {"Accept-Encoding": "deflate, gzip"}}, + {"multiValueHeaders": {"Accept-Encoding": ["deflate, gzip"]}}, + {"multiValueHeaders": {"Accept-Encoding": ["deflate", "gzip"]}}, + ], +) +def test_response_with_compress_enabled(headers: dict): # GIVEN a function # AND an event with a "Accept-Encoding" that include gzip # AND the Response object with compress=True app = ApiGatewayResolver() - mock_event = {"path": "/my/request", "httpMethod": "GET", "headers": {"Accept-Encoding": "deflate, gzip"}} + mock_event = {"path": "/my/request", "httpMethod": "GET", **headers} expected_value = '{"test": "value"}' @app.get("/my/request")