无法使用Lambda和API网关访问API

问题描述 投票:0回答:3

我有一个 aws lambda 函数,它返回以下响应:

var responseBody = { cost: price };
var response = {
   statusCode: 200,
   headers: {
          "Access-Control-Allow-Origin": "*"
     },
    body: JSON.stringify(responseBody),
    isBase64Encoded: false
};

callback(null, response);

但是我在前端 Angular 应用程序中收到以下错误。

访问 XMLHttpRequest 'https://xxxxxxxxx.execute-api.us-east-1.amazonaws.com/dev/price' 来自 来源 'http://127.0.0.1:8080' 已被 CORS 策略阻止: 对预检请求的响应未通过访问控制检查:它 没有 HTTP 正常状态。

node.js amazon-web-services aws-lambda aws-api-gateway
3个回答
14
投票

如果您使用 API Gateway HTTP API(不确定这是否与 REST API 相关):

假设我的端点位于

/POST products
。我必须在 /OPTIONS products 添加另一个端点
,并将其与一个简单的 Lambda 函数集成,该函数仅返回 HTTP 200 OK(或 HTTP 204 No Content)和 
"Access-Control-Allow-Origin": "*"
 标头(或者更好的是,指定以下 URL)您的来源/客户)。

这是因为浏览器在发出实际请求之前,会向同一端点发出预检

/OPTIONS

 请求(请参阅
更多),对于除 GET
POST
 之外的所有 HTTP 请求(具有某些 MIME 类型)(
source) .


1
投票
您需要使用 API 网关在您的资源上启用 CORS,请查看此链接以获取更多信息

https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html


0
投票
几年后,我通过 CDK 部署的 API 遇到了这个问题。也许这会对处于同样情况的其他人有所帮助。

如果您使用

ANY

 路线,请尝试切换到特定方法路线:
[GET, PUT, POST, DELETE]

在我的情况下(当使用

ANY

 路线时),我的 
POST
 的预检失败并出现以下错误:

...已被 CORS 策略阻止:无法响应预检请求 通过访问控制检查:它没有 HTTP ok 状态。

当我从一条

ANY

 路线切换到特定 
[GET, PUT, POST, DELETE]
 路线时,我的预检和 POST 请求均按预期工作。

© www.soinside.com 2019 - 2024. All rights reserved.