AWS::Serverless::HttpApi CORS配置POST生效但OPTIONS不生效如何解决
问题核心原因
你自定义了/auctions路径的OPTIONS路由并绑定了Lambda函数,此时AWS HttpApi的全局CorsConfiguration配置不会自动为该自定义OPTIONS路由注入跨域响应头,只有非自定义的路由和平台自动生成的OPTIONS响应才会自动携带配置的CORS头。
可行解决方案
方案一:删除自定义OPTIONS函数(推荐)
你不需要手动编写OPTIONS处理逻辑,HttpApi开启CORS配置后会自动处理所有路由的预检请求:
- 删掉
template.yaml里的OptionsFunction整段资源配置 - 重新执行SAM部署,等待配置生效后测试即可。此时OPTIONS请求会自动返回204状态码,同时携带你配置的所有CORS响应头。
如果之前删除后测试无响应头,大概率是旧的自定义OPTIONS路由残留未清理,部署前可先到API Gateway控制台手动删除残留的OPTIONS路由再重新部署。
方案二:在自定义OPTIONS Lambda中手动添加CORS响应头
如果你有特殊逻辑需要保留自定义OPTIONS处理函数,直接在返回值中补充所有需要的跨域头即可,示例代码如下:
def lambda_handler(event, context): return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS', 'Access-Control-Allow-Headers': '*' } }
额外注意:如果后续你的接口需要支持Cookie等凭证传递,需要把Access-Control-Allow-Origin改为具体的域名而非*,同时补充Access-Control-Allow-Credentials: true头。
内容的提问来源于stack exchange,提问作者gamda
相关产品推荐
相关产品推荐

