添加AWS认证时遭遇CORS策略拦截错误,求解决方案
解决Lambda URL的CORS跨域错误(缺少Access-Control-Allow-Origin头)
你的错误信息:
Access to XMLHttpRequest at 'https://2ydk2p26dbv2ak5fygphvcb6ey0dzrzm.lambda-url.us-east-1.on.aws/' from origin 'https://function-url-ver2-1.d2qo24bmjgejow.amplifyapp.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
解决方法如下:
1. 配置Lambda URL的CORS规则
登录AWS控制台,找到目标Lambda函数:
- 进入「配置」标签页,选择「函数URL」选项
- 点击「编辑CORS」,进行以下设置:
- 允许的来源:填入你的Amplify域名
https://function-url-ver2-1.d2qo24bmjgejow.amplifyapp.com(生产环境别用*,仅测试时临时使用) - 允许的方法:勾选
OPTIONS和POST - 允许的标头:添加
Authorization, x-amz-date, Content-Type - 保存配置
- 允许的来源:填入你的Amplify域名
2. 在Lambda函数代码中处理OPTIONS预请求
浏览器会先发送OPTIONS预请求验证跨域权限,你的Lambda函数必须直接响应这个请求,返回正确的CORS头。以Node.js为例,在函数开头加入:
exports.handler = async (event) => { // 处理OPTIONS预请求 if (event.requestContext.http.method === 'OPTIONS') { return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': 'https://function-url-ver2-1.d2qo24bmjgejow.amplifyapp.com', 'Access-Control-Allow-Methods': 'POST, OPTIONS', 'Access-Control-Allow-Headers': 'Authorization, x-amz-date, Content-Type' }, body: '' }; } // 你的原有业务逻辑代码 // ... };
3. 修正请求代码中的host参数
你的签名代码里的host带了https://,不符合AWS签名规范,会导致签名验证失败。修改为纯域名:
host = '2ydk2p26dbv2ak5fygphvcb6ey0dzrzm.lambda-url.us-east-1.on.aws';
内容的提问来源于stack exchange,提问作者Ajay Kulkarni
相关产品推荐
相关产品推荐

