【问题标题】:AWS Application Load Balancer (ALB) passing requests to lambda with body base64 encoded?AWS Application Load Balancer (ALB) 将请求传递给带有 base64 编码主体的 lambda?
【发布时间】:2020-11-16 07:54:15
【问题描述】:

我有一个启用了 SSL 的 AWS ALB。当我尝试访问网页时,ALB 使用表单数据调用 lambda 函数。当未配置为运行 SSL 时,一切正常。但是,使用 SSL,正文显示为 base64 编码。我可以对其进行解码并使用它,只是它不能解码为有用的格式(见下文)。如何获取表单数据是一种有用的格式? (即:json)

谢谢

base64 编码体:

LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTk2OTM2MjQ3MTIzNDE5MTIwOTQ1MDE3Ng0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJmaXJzdE5hbWUiDQoNCkZyZWQNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS05NjkzNjI0NzEyMzQxOTEyMDk0NTAxNzYNCkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT0ibGFzdE5hbWUiDQoNCkZsaW5zdG9uZQ0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTk2OTM2MjQ3MTIzNDE5MTIwOTQ1MDE3Ni0tDQo=

解码体:

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'

【问题讨论】:

  • 对 ALB 的请求是什么样的?请求正文应包含 JSON 格式的数据..
  • curl --location --request POST '---.com' \ --form 'firstName=Fred' \ --form 'lastName=Flinstone'
  • 是的,我猜 ALB 只会正确地对 JSON 数据进行 base64 编码。尝试使用 curl 在请求正文中发布 JSON 数据。

标签: amazon-web-services amazon-elb


【解决方案1】:

所以在上面的示例中,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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-15
    • 2018-05-27
    • 2019-06-08
    • 2017-01-14
    • 2020-12-31
    • 2021-01-21
    • 2019-07-08
    • 2021-05-25
    相关资源
    最近更新 更多