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

执行SAM Package命令时YAML文件CORS参数被添额外引号的问题求助

解决SAM Package导致API Gateway CORS重复Origin头问题

问题根源

你遇到的Access-Control-Allow-Origin多值错误,本质是SAM CLI在执行sam package时,对模板中CORS配置参数的引号处理异常,导致生成的最终配置里出现嵌套引号(比如'''*'''),API Gateway解析后返回重复的Origin头。

解决步骤

1. 修正SAM模板的CORS配置写法

直接移除CORS参数的所有引号,用YAML原生字符串格式书写,SAM会自动正确处理转义:

Globals:
  Function:
    Timeout: 3
  Api:
    Cors:
      AllowOrigin: *
      AllowHeaders: Content-Type
      AllowMethods: OPTIONS,POST,DELETE,GET,PUT

如果担心YAML解析特殊字符的问题,也可以只加一层单引号:

Globals:
  Function:
    Timeout: 3
  Api:
    Cors:
      AllowOrigin: '*'
      AllowHeaders: 'Content-Type'
      AllowMethods: 'OPTIONS,POST,DELETE,GET,PUT'

注意:绝对不要使用多层引号(比如'''*'''),这会触发SAM的错误转义逻辑。

2. 升级SAM CLI到最新版本

老版本的SAM CLI存在引号处理的已知bug,执行对应命令升级到最新稳定版:

# pip安装的SAM
pip install --upgrade aws-sam-cli

# Homebrew安装的SAM(MacOS)
brew upgrade aws-sam-cli

3. 手动修正打包后的模板(临时方案)

如果升级后问题仍存在,可在sam package完成后,找到生成的打包模板文件(通常是packaged.yaml),手动删除CORS参数中的多余引号,再执行sam deploy:

  • 将AllowOrigin: '''*'''修改为AllowOrigin: "*"
  • 同理修正AllowHeaders和AllowMethods的引号格式

验证修复

部署完成后,打开浏览器开发者工具的网络面板,触发前端请求,查看响应头中的Access-Control-Allow-Origin,确认仅存在一个*值,CORS错误即可消失。

内容的提问来源于stack exchange,提问作者Joshua Foxworth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 00:57:22