Aws lambda “问题”;X-转发-*”;AWS Lambda完成的HTTP请求中的标头

Aws lambda “问题”;X-转发-*”;AWS Lambda完成的HTTP请求中的标头,aws-lambda,amazon-cloudfront,serverless-framework,aws-serverless,Aws Lambda,Amazon Cloudfront,Serverless Framework,Aws Serverless,我使用Serverless开发了一个AWS Lambda代理,以便调用私有API、处理其结果并返回它 虽然在HTTP请求中设置了“X-Forwarded-For”后,私有API不会返回任何内容,但这非常简单 我还没有找到在CloudFront、CloudFormation或API Gateway中将此头列入黑名单的方法 我应该去哪里找 作为参考,我使用的serverless.yml service: mylambda provider: name: aws runtime: java8

我使用Serverless开发了一个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?如果是这样的话,他们似乎用以启用bot保护,这将解释此标头的设置位置以及API阻止您的请求的原因。

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

有关黑名单标题列表的更多信息,请参阅以下链接:

如果希望CloudFront添加任何CloudFront-*头,则必须根据这些头将CloudFront配置为缓存。有关将CloudFront配置为基于指定头缓存的信息,请参阅此链接了解更多信息:

请注意,对于查看器事件,CloudFront查看器国家/地区被列入黑名单。黑名单标题未公开,无法通过添加Lambda@Edge功能。如果Lambda函数添加了一个黑名单头,则请求将失败CloudFront验证,CloudFront将HTTP状态代码502(坏网关)返回给查看器


希望这有帮助。

API网关是使用Lambda代理还是使用Lambda集成?哦,对了,我忘了指定它是Lambda代理。使用Lambda代理意味着整个消息(包括所有头)都直接传递给Lambda。您必须移动到带有主体映射的Lambda集成,以停止传入此标头。我认为你可能用错误的方式解决了这个问题。与其尝试停止传入标头,不如检查lambda代码,找出额外标头导致其失败的原因,然后修复它。实际上,我正在使用Apache的HTTP客户端从lambda调用一个不属于我的HTTP端点。麻烦的是,Amazon在这个传出呼叫中附加了不需要的标题,而我在lambda的代码中对此没有控制权。对不起,我误解了你的问题,尽管现在我更困惑了。您是说通过API网关端点附加到传入API请求的x-forward-for值正在传递到您从lambda调用的私有API吗?如果是这样,那仍然是Lambda中代码的问题。我不相信所有的X-Forwarded-*头都被列入黑名单,根据文档,只有X-Forwarded-Proto被列入黑名单。