You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为集成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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:16:15