aws-lambda - AWS Lambda 完成的 HTTP 请求中的“X-Forwarded-*”标头出现问题
问题描述
我使用无服务器开发了一个 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
解决方案
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(错误网关)。
希望这可以帮助。
推荐阅读
- angular - 可观察值更改时,角度异步管道不刷新
- jena - 本体的TBOX和ABOX如何存储,推理应该在哪里进行?
- java - 编写一个接收列表的减法循环
- json - 如何使用 Python 将 CSV 转换为 JSON
- multithreading - 在多线程中字典是否有可能返回错误的值c#
- c++ - 套接字连接在 main 但不在函数内部
- spring-boot - 当我们使用 oauth2 时在 thymeleaf 客户端中注销
- arduino - A32s指纹模块引出线
- rust - 如何使用 log4rs 的 RollingFileAppender 来合并滚动日志?
- excel - 检查当前行单元格日期是否在过去