【问题标题】:Troubles with "X-Forwarded-*" headers in HTTP request done by AWS LambdaAWS Lambda 完成的 HTTP 请求中的“X-Forwarded-*”标头出现问题
【发布时间】:2018-12-18 19:07:44
【问题描述】:

我使用无服务器开发了一个 AWS Lambda 代理,以便调用私有 API、处理其结果并返回它。

这很简单,尽管一旦在 HTTP 请求中设置了“X-Forwarded-For”,私有 API 就不会返回任何内容。

我还没有找到在 CloudFront、CloudFormation 或 API Gateway 中将此标头列入黑名单的方法。

我应该在哪里寻找?

作为参考,我使用的serverless.yml

service: mylambda
provider:
  name: aws
  runtime: java8
  memorySize: 1024
  timeout: 240
package:
  artifact: target/awslambda-1.0-SNAPSHOT.jar
functions:
  leboncoinlist:
    handler: com.example.awslambda.handler.HttpRequestHandler
    events:
        - http:
            path: list
            method: post
            cors: true

【问题讨论】:

  • API Gateway 是使用 Lambda 代理还是 Lambda 集成?
  • 哦对了,我忘了指定它是 Lambda 代理
  • 使用 Lambda Proxy 意味着将整个消息(包括所有标头)直接传递给 Lambda。您必须将 Lambda 与正文映射集成以阻止此标头被传入。我认为您可能以错误的方式解决问题。与其试图阻止头文件被传入,不如检查你的 lambda 代码,找出为什么额外的头文件导致它失败,然后修复它。
  • 我实际上是在使用 Apache 的 HTTP 客户端从我的 Lambda 调用不是我的 HTTP 端点。麻烦的是,亚马逊在这个拨出电话上附加了不需要的标头,我无法在我的 lambda 代码中控制它。
  • 对不起,我误解了你的问题,虽然现在我更困惑了。您是说通过 API Gateway 端点附加到传入 API 请求的 x-forward-for 值正在传递给您从 lambda 调用的私有 API?如果是这样,这仍然是您在 Lambda 中的代码的问题。

标签: aws-lambda amazon-cloudfront serverless-framework aws-serverless


【解决方案1】:

Amazon Lambda 不允许设置 X-Forwared-* 标头。它已经是列入黑名单的标头的一部分。如果您要将其设置为 Lambda 函数的一部分,CloudFront 的默认行为是请求未通过 CloudFront 验证。 CloudFront 向查看器返回 HTTP 状态代码 502(错误网关)。

有关列入黑名单的标头列表的更多信息,请参见以下链接:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-cloudfront-star-headers

如果您希望 CloudFront 添加任何 CloudFront-* 标头,则必须将 CloudFront 配置为基于这些标头进行缓存。有关将 CloudFront 配置为基于指定标头进行缓存的信息,请参阅此链接了解更多信息:https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesForwardHeaders

请注意,对于查看器事件,CloudFront-Viewer-Country 被列入黑名单。列入黑名单的标头不会公开,也无法由 Lambda@Edge 函数添加。如果您的 Lambda 函数添​​加了列入黑名单的标头,则请求将无法通过 CloudFront 验证,并且 CloudFront 会向查看器返回 HTTP 状态代码 502(错误网关)。

希望这会有所帮助。

【讨论】:

  • 我不相信 所有 X-Forwarded-* 标头都被列入黑名单,根据文档,只有 X-Forwarded-Proto 被列入黑名单。
【解决方案2】:

你在使用leboncoin.fr的API吗?如果是这样,他们似乎使用datadome 来启用机器人保护,这将解释此标头的设置位置以及 API 阻止您的请求的原因。

【讨论】:

    猜你喜欢
    • 2016-06-03
    • 1970-01-01
    • 2016-08-14
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 2015-10-01
    • 1970-01-01
    相关资源
    最近更新 更多