首页 > 解决方案 > AWS Application Load Balancer (ALB) passing requests to lambda with body base64 encoded?

问题描述

I have an AWS ALB with SSL turned on. When I try to access the web page, the ALB calls a lambda function with form data. When not configured to run SSL, everything works fine. But, with SSL, the body shows up base64 encoded. I could just decode it and use it, except that it doesn't decode to a useful format (see below). How do I get the form data is a useful format? (IE: json)

Thanks

base64 encoded body:

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTk2OTM2MjQ3MTIzNDE5MTIwOTQ1MDE3Ng0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaXJzdE5hbWUiDQoNCkZyZWQNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05NjkzNjI0NzEyMzQxOTEyMDk0NTAxNzYNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibGFzdE5hbWUiDQoNCkZsaW5zdG9uZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTk2OTM2MjQ3MTIzNDE5MTIwOTQ1MDE3Ni0tDQo=

decoded body:

b'----------------------------969362471234191209450176\r\nContent-Disposition: form-data; name="firstName"\r\n\r\nFred\r\n----------------------------969362471234191209450176\r\nContent-Disposition: form-data; name="lastName"\r\n\r\nFlinstone\r\n----------------------------969362471234191209450176--\r\n'

标签: amazon-web-servicesamazon-elb

解决方案


因此,在上面的示例中,ALB 正确地编码了所有内容。它准确地向您展示了 curl 发送的内容。

当您使用该curl --form选项时,您得到的是Content-Type: multipart/form-data boundary=<divider string>. 如果您检查请求标头,您可以看到这一点。这是该信息的示例。

--------------------------b788e21bda17cfad Content-Disposition: form-data; name="firstName"

Fred
--------------------------b788e21bda17cfad Content-Disposition: form-data; name="lastName"

Smith
--------------------------b788e21bda17cfad--

我假设您期待更常见的application/x-www-form-urlencoded内容类型。为此,请使用 curl -X POST -d "firstName=Fred" -d "lastName=Smith" <URL>,这将导致更熟悉的正文内容:

first=Fred&lastName=Smith

最后要将您的请求发布为 JSON,请使用:

curl -X POST -H "Content-Type: application/json" --data '{"firstName": "Fred","lastName": "Smith"}' <URL>

最后一点:奇怪的是,当您通过 ALB 发送 JSON 时,即使启用了 SSL,它也不会对正文进行 base64 编码。请记住正确设置内容类型,以便 ALB 知道您正在发送 JSON。


推荐阅读