我有一个 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 正常状态。
如果您使用 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) .
如果您使用
ANY
路线,请尝试切换到特定方法路线:
[GET, PUT, POST, DELETE]
。在我的情况下(当使用
ANY
路线时),我的
POST
的预检失败并出现以下错误:
...已被 CORS 策略阻止:无法响应预检请求 通过访问控制检查:它没有 HTTP ok 状态。当我从一条
ANY
路线切换到特定
[GET, PUT, POST, DELETE]
路线时,我的预检和 POST 请求均按预期工作。