如何为集成API Gateway的Lambda配置特定域名CORS(LAMBDA_PROXY模式)
解决方法:Lambda代理模式下指定特定域名的CORS头
我来帮你把代码补全并优化,确保只允许指定域名完成跨域访问——你的原代码里域名没写完整,而且还得兼容浏览器的CORS预请求,不然跨域调用会失败。以下是完整可运行的代码:
'use strict'; module.exports.handler = (event, context, callback) => { // 定义仅允许的特定域名 const ALLOWED_ORIGIN = 'https://www.example.com'; // 处理CORS预请求(OPTIONS方法) if (event.httpMethod === 'OPTIONS') { const preflightResponse = { statusCode: 200, headers: { 'Access-Control-Allow-Origin': ALLOWED_ORIGIN, 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type, Authorization' }, body: JSON.stringify({}) }; callback(null, preflightResponse); return; } // 处理业务逻辑请求(比如GET/POST等) const businessResponse = { statusCode: 200, headers: { 'Access-Control-Allow-Origin': ALLOWED_ORIGIN, 'Content-Type': 'application/json' }, body: JSON.stringify({ message: '请求处理成功!' }) }; callback(null, businessResponse); };
关键细节说明:
- 因为你用的是LAMBDA_PROXY集成模式,API Gateway会直接转发Lambda返回的所有响应头,所以不需要在API Gateway的CORS设置里重复配置(但建议保持两者的允许域名一致,避免浏览器出现冲突报错)。
- 必须处理
OPTIONS方法:浏览器在发送跨域业务请求前,会先发送OPTIONS预请求验证权限,如果Lambda不返回正确的CORS头,预请求会失败,后续业务请求也不会发送。 - 严格指定
https://www.example.com而非通配符*,才能实现“仅允许特定域名”的需求。 - 如果你的API Gateway已经启用了CORS,不要把Allowed Origin设为通配符,直接指定和Lambda一致的域名即可。
内容的提问来源于stack exchange,提问作者Chris Diggs
相关产品推荐
相关产品推荐

