我将节点js用作反向代理,主要使用http和http-proxy模块。在将请求发送到nodejs以重定向到我的应用程序之一时,我必须传递全部都是大写的请求标头。但是,nodejs或http会将所有大写字母转换为小写字母,因此我的应用程序验证之一失败。
我的代码段是:
http.createServer(function (request, response) {
var redirection = 'http://localhost:8000';
var path = url.parse(request.url).path;
switch (path) {
case '/health':
proxy.web(request, response, { target: redirection });
break;
}).listen(8080);
Run Code Online (Sandbox Code Playgroud)
传递的请求标头是:
curl -H "X-AUTH: PBxqcEm5sU743Cpk" -X GET http://localhost:8080/health
Run Code Online (Sandbox Code Playgroud)
现在发生的是,标题“ X-AUTH”已转换为“ x-auth”,而我的应用程序无法对其进行验证。在我的应用程序中,标头匹配区分大小写。
从节点js请求对象打印的请求标头是:
{ host: 'localhost:8080',
'user-agent': 'curl/7.47.1',
accept: '*/*',
'x-auth': 'PBxqcEm5sU743Cpk' }
Run Code Online (Sandbox Code Playgroud)
我的要求是保留请求中传递的标头的大写字母,以便我的应用程序可以对其进行验证和授权。请让我知道是否有任何方法可以实现这一目标
非常感谢
我试图从另一个调用一个AWS Lambda并执行Lambda链接。这样做的基本原理是,AWS不提供来自同一S3存储桶的多个触发器。
我创建了一个带s3触发器的lambda。第一个lambda的Java代码将侦听S3事件,并包含另一个lambda的调用。第二个lambda将从第一个lambda调用。两种lambda的创建都是通过terraform完成的。
Lambda A具有S3触发器。这将在特定存储桶上的S3事件上调用。Lambda A将进行处理,并使用调用请求来调用LambdaB。来自Lambda A的Lambda B调用Java中的代码是:
public class EventHandler implements RequestHandler<S3Event, String> {
@Override
public String handleRequest(S3Event event, Context context) throws RuntimeException {
InvokeRequest req = new InvokeRequest()
.withFunctionName("LambdaFunctionB")
.withPayload(json);
return "Lambda B invoked"
}
}
Run Code Online (Sandbox Code Playgroud)
两个lambda都是使用terraform创建的。以下脚本:
Lambda terraform:
module "lambda_function" {
source = "Git Path"
absolute_artifact_path = "../lambda.jar"
lambda_function_name = "LambdaFunctionA"
lambda_function_description = ""
lambda_function_runtime = "java8"
lambda_handler_name = "EventHandler"
lambda_execution_role_name = "lambda-iam-role"
lambda_memory = "512"
dead_letter_target_arn = "error-handling-arn"
}
resource "aws_lambda_permission" "allow_bucket" {
statement_id = "statementId" …
Run Code Online (Sandbox Code Playgroud)