gpt4 book ai didi

amazon-web-services - 如何在 API Gateway Lambda 代理集成中获取 HTTP header 'Content-Length'

转载 作者:行者123 更新时间:2023-12-04 12:25:27 25 4
gpt4 key购买 nike

我需要构建一个函数,它需要 5 个特定的 HTTP header + 请求参数、聚合、排序、编码,然后对它们进行散列,以验证/验证整个请求。但是,我无法将标题“Content-Length”传递给 lambda。

我使用 Terraform 创建 API 网关 (aws_api_gateway_domain_name),然后使用 Serverless 创建端点:

functions:
alerts:
handler: src/event.handler
role: arn:aws:iam::${env:AWS_ACCOUNT_ID}:role/alerts_lambda
environment:
API_TRANS_KEY: ${env:API_TRANS_KEY}
REGION: ${self:custom.region}
SNS_ARN: arn:aws:sns:us-east-1:${env:AWS_ACCOUNT_ID}:Transactions
STAGE: ${self:custom.deploymentStage}
events:
- http:
path: /alerts/AccountEvent
method: post
cors: true
integration: lambda-proxy

但是我得到的标题是:
    "headers": {
"Accept": "*/*",
"accept-encoding": "gzip, deflate",
"Cache-Control": "no-cache",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Desktop-Viewer": "true",
"CloudFront-Is-Mobile-Viewer": "false",
"CloudFront-Is-SmartTV-Viewer": "false",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Viewer-Country": "US",
"Content-Type": "application/x-www-form-urlencoded",
"Date": "20170504:141752UTC",
"Encryption-Type": "HMAC-SHA256",
"Host": "events.dev.myapi.com",
"Postman-Token": "84bd0cc3-f339-4b2a-8017-31ec9174c37e",
"User-Agent": "PostmanRuntime/7.11.0",
"User-ID": "galileo",
"Via": "1.1 50c3c79d5d7adbc8948ea11709b61d17.cloudfront.net (CloudFront)",
"X-Amz-Cf-Id": "1OE1aGP_3Q-CkXFuJbRwvkGAR2ZaHAPuozckZ6747EP64zZcmXjphw==",
"X-Amzn-Trace-Id": "Root=1-5d0bf01b-8afdb9628f42a9357dbb5c68",
"X-Forwarded-For": "73.72.58.46, 70.132.57.87",
"X-Forwarded-Port": "443",
"X-Forwarded-Proto": "https"
},

此时是否需要使用映射模板? CloudFront/Api Gateway 是否出于某种原因删除了这个 header (注意,我没有设置 CloudFront 分配,但 API Gateway 由于“边缘”类型​​而正在创建一个,但如果可以解决,我可以将其更改为“区域”这个)?

最佳答案

根据我的测试,Content-Length发出 API 请求时可以传递 header 。但是,它不会出现在 Lambda 代理集成的事件负载中。

您可以使用两种方法来接收 Content-Length标题:

  • 使用 HTTP API使用 Lambda 代理集成而不是 API Gateway 中的 REST API。
  • 使用 Lambda non-proxy Integration对于 REST API 并按如下方式配置它:
  • 在集成请求的映射模板中:
  • 套装application/jsonContent-Type
  • 通过添加语句更改默认的“方法传递模板”模板 - "X-Content-Length" : $input.body.length()
  • 在 Lambda 函数中,变量事件 ['X-Content-Length']将包含 Content-Length .
  • 关于amazon-web-services - 如何在 API Gateway Lambda 代理集成中获取 HTTP header 'Content-Length',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56693981/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com