我设置了一个 AWS lambda 函数,它返回一些数据,然后设置一个 API 网关和一个 POST 方法,然后设置指向它的 API 网关(无授权)。
我想允许来自任何来源的访问。我相信我已经正确设置了 CORS 标头和 api 网关,但我仍然收到预检响应错误。
我已将标头添加到 lambda 函数中:
exports.handler = async (event) => {
return {
statusCode: 200,
headers: {
"Access-Control-Allow-Headers": "*",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "*",
"Access-Control-Allow-Credentials": true,
'Content-Type': 'application/json'
},
body: JSON.stringify({})
}
};
在 API 网关中,我启用了 CORS,它使用 MOCK 集成类型为预检响应创建了 OPTIONS 方法。
我已确认我的 POST 请求在邮递员中有效。
但是,在客户端我收到预检请求错误:
Access to fetch at '[API Gateway URL]' from origin 'MY WEBSITE' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
检查网络日志,OPTIONS 端点返回 HTTP 500 错误,我无法弄清楚 API 网关中的配置有什么问题。当我在API网关中测试端点时,端点返回200。我是否缺少一些配置 CORS 的配置步骤?
最后,从AWS API网关文档中找到了实现步骤。我集成了相同的内容,它按预期工作。
根据文档,当我们在 API 网关中配置 CORS 时,我们必须创建专用路由来管理预检请求。
以下是“为 HTTP API 配置 CORS”的高级步骤
export const handler = async (event) => {
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Headers" : "Content-Type",
"Access-Control-Allow-Origin": "https://www.example.com",
"Access-Control-Allow-Methods": "OPTIONS,POST,GET"
},
body: JSON.stringify('Hello from Lambda!'),
};
return response;
};
请参阅此处了解有关标题的更多信息。
FYR,附API网关路由截图
预检请求处理程序(Lambda 函数)
应用程序中预检请求成功
有关实施的更多详细信息,请参阅此处。
关于API路由请参考这里
raheem.unr 我花了 2 天的时间才让它在 SAM 模板中正常工作,这终于帮助了我。 谢谢!