From f834027aaf88b3885f4aa8edf6944ae920daf2dc Mon Sep 17 00:00:00 2001 From: Matthieu Napoli Date: Wed, 31 Jan 2024 11:23:56 +0100 Subject: [PATCH] Add support for multi-value response headers with API Gateway v2 --- src/Event/Http/HttpResponse.php | 2 +- tests/Event/Http/HttpResponseTest.php | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/Event/Http/HttpResponse.php b/src/Event/Http/HttpResponse.php index 7129f9073..80a679bc2 100644 --- a/src/Event/Http/HttpResponse.php +++ b/src/Event/Http/HttpResponse.php @@ -72,7 +72,7 @@ public function toApiGatewayFormatV2(): array } else { // Make sure the values are never arrays // because API Gateway v2 does not support multi-value headers - $headers[$name] = is_array($values) ? end($values) : $values; + $headers[$name] = is_array($values) ? implode(', ', $values) : $values; } } diff --git a/tests/Event/Http/HttpResponseTest.php b/tests/Event/Http/HttpResponseTest.php index 5dcc53cbc..dab15792e 100644 --- a/tests/Event/Http/HttpResponseTest.php +++ b/tests/Event/Http/HttpResponseTest.php @@ -58,7 +58,7 @@ public function test headers are capitalized() ], $response->toApiGatewayFormatV2()); } - public function test nested arrays in headers are flattened() + public function test multi value headers() { $response = new HttpResponse('', [ 'foo' => ['bar', 'baz'], @@ -76,8 +76,10 @@ public function test nested arrays in headers are flattened() 'cookies' => [], 'isBase64Encoded' => false, 'statusCode' => 200, - // The last value is kept (when multiheaders are not enabled) - 'headers' => ['Foo' => 'baz'], + // Headers are joined with a comma + // See https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.2 + // API Gateway v2 does not support multi-value headers + 'headers' => ['Foo' => 'bar, baz'], 'body' => '', ], $response->toApiGatewayFormatV2()); }