Skip to content

Commit 9ef6dcb

Browse files
committed
fix: return correct header keys for each integration
1 parent 343159e commit 9ef6dcb

File tree

1 file changed

+13
-14
lines changed

1 file changed

+13
-14
lines changed

lambda-http/src/response.rs

+13-14
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ impl LambdaResponse {
6969
body,
7070
is_base64_encoded,
7171
status_code: status_code as i64,
72-
// explicitly empty, as API gateway does not properly merge headers and
73-
// multi-value-headers, resulting in duplicate headers
72+
// Explicitly empty, as API gateway v1 will merge "headers" and
73+
// "multi_value_headers" fields together resulting in duplicate response headers.
7474
headers: HeaderMap::new(),
7575
multi_value_headers: headers,
7676
}),
@@ -93,21 +93,20 @@ impl LambdaResponse {
9393
is_base64_encoded,
9494
status_code: status_code as i64,
9595
cookies,
96-
// explicitly empty, as API gateway does not properly merge headers and
97-
// multi-value-headers, resulting in duplicate headers
98-
headers: HeaderMap::new(),
99-
multi_value_headers: headers,
96+
// API gateway v2 doesn't have multiValueHeaders field. Duplicate headers are
97+
// combined with commas and included in the headers field.
98+
headers: headers,
99+
multi_value_headers: HeaderMap::new(),
100100
})
101101
}
102102
#[cfg(feature = "alb")]
103103
RequestOrigin::Alb => LambdaResponse::Alb(AlbTargetGroupResponse {
104104
body,
105105
status_code: status_code as i64,
106106
is_base64_encoded,
107-
// ALB responses are used for ALB integrations as well as
108-
// Lambda Function URLs. The former uses the `multi_value_headers` field,
109-
// while the later uses the `headers` field. We need to return
110-
// both fields to ensure both integrations work correctly.
107+
// ALB responses are used for ALB integration, which can be configured to use
108+
// either headers or multi-value headers field. We need to return both fields to
109+
// ensure both configuration work correctly.
111110
headers: headers.clone(),
112111
multi_value_headers: headers,
113112
status_description: Some(format!(
@@ -475,7 +474,7 @@ mod tests {
475474
let json = serde_json::to_string(&response).expect("failed to serialize to json");
476475
assert_eq!(
477476
json,
478-
r#"{"statusCode":200,"headers":{},"multiValueHeaders":{"content-encoding":["gzip"]},"body":"MDAwMDAw","isBase64Encoded":true,"cookies":[]}"#
477+
r#"{"statusCode":200,"headers":{"content-encoding":"gzip"},"multiValueHeaders":{},"body":"MDAwMDAw","isBase64Encoded":true,"cookies":[]}"#
479478
)
480479
}
481480

@@ -493,7 +492,7 @@ mod tests {
493492
let json = serde_json::to_string(&response).expect("failed to serialize to json");
494493
assert_eq!(
495494
json,
496-
r#"{"statusCode":200,"headers":{},"multiValueHeaders":{"content-type":["application/json"]},"body":"000000","isBase64Encoded":false,"cookies":[]}"#
495+
r#"{"statusCode":200,"headers":{"content-type":"application/json"},"multiValueHeaders":{},"body":"000000","isBase64Encoded":false,"cookies":[]}"#
497496
)
498497
}
499498

@@ -511,7 +510,7 @@ mod tests {
511510
let json = serde_json::to_string(&response).expect("failed to serialize to json");
512511
assert_eq!(
513512
json,
514-
r#"{"statusCode":200,"headers":{},"multiValueHeaders":{"content-type":["application/json; charset=utf-16"]},"body":"〰〰〰","isBase64Encoded":false,"cookies":[]}"#
513+
r#"{"statusCode":200,"headers":{"content-type":"application/json; charset=utf-16"},"multiValueHeaders":{},"body":"〰〰〰","isBase64Encoded":false,"cookies":[]}"#
515514
)
516515
}
517516

@@ -529,7 +528,7 @@ mod tests {
529528
let json = serde_json::to_string(&response).expect("failed to serialize to json");
530529
assert_eq!(
531530
json,
532-
r#"{"statusCode":200,"headers":{},"multiValueHeaders":{"content-type":["application/graphql-response+json; charset=utf-16"]},"body":"〰〰〰","isBase64Encoded":false,"cookies":[]}"#
531+
r#"{"statusCode":200,"headers":{"content-type":"application/graphql-response+json; charset=utf-16"},"multiValueHeaders":{},"body":"〰〰〰","isBase64Encoded":false,"cookies":[]}"#
533532
)
534533
}
535534

0 commit comments

Comments
 (0)