I have a lambda target behind an ALB. My lambda is a python lambda.
def handler(event, context):
response = {
"statusCode": 200,
"statusDescription": "200 OK",
"isBase64Encoded": False,
"headers": {
"Content-Type": "text/html; charset=utf-8"
}
}
On hitting my url using curl though, I receive a
< HTTP/1.1 200 OK
< Server: awselb/2.0
< Date: Sat, 06 Apr 2019 04:46:50 GMT
< Content-Type: application/octet-stream
< Content-Length: 0
< Connection: keep-alive
Note Content-Type
is an octet-stream, which causes browsers to download the response as a file instead of displaying it. I tried adding additional headers "Foo":"Bar"
to the response and they don't show up in the curl response. ALB seems to be eating my lambda supplied headers. How can I fix this?
Turns out I had multivalue headers turned on for my target group. With that setting turned on, my lambdas needs to return a response with field multiValueHeaders
set instead of headers
. So my lambda code needed to be:
def handler(event, context):
response = {
"statusCode": 200,
"statusDescription": "200 OK",
"isBase64Encoded": False,
"multiValueHeaders": {
"Content-Type": ["text/html; charset=utf-8"]
}
}
More information on AWS' release blog post.