【发布时间】:2020-09-26 02:01:09
【问题描述】:
我将 AWS HTTP API 与 Lambda 代理集成一起使用。 API Gateway 不支持 Lambda 代理的 CORS 配置(不要在不知道的情况下质疑这个)。因此,我使用相同的 lambda 来提供 CORS Preflight 响应。
if(event.routeKey.startsWith('OPTIONS') {
return {
statusCode: 200,
// CORS Headers
};
}
// Code for main methods like POST
(我使用API Gateway Proxy Event的payload格式2.0版)
为了连接到 API,我使用 Angular。虽然,我在代码中只发出一个请求,但我的 API 收到了两个预期的请求。但是,我不确定 Angular 或浏览器本身是否发出了额外的请求。无论如何,我想完全控制 CORS 预检请求。如何做到这一点?
我想这样做的原因是因为 HTTP API 发送 coonection: keep-alive 标头,但资源请求没有使用相同的连接。结果是:如果 userA 在 CORS Preflight 请求中预热了 lambda(冷启动),则 userB 可以靠运气偷走努力,而 userA 可能需要预热新的 lambda,这会带来两个冷启动:一个用于 CORS Preflight 和另一个用于资源请求。
如何重用执行 CORS 预检的同一连接?
【问题讨论】:
-
您的询问不能在前端完成,CORS Preflight 请求是由浏览器本身发出的,而不是有角度的。您需要添加一些服务器逻辑来解决此问题。我想请您删除角度标签,因为您的问题与角度无关。
标签: javascript angular aws-lambda cors