Serverless框架配置AWS HTTP API的CORS规则不生效问题求助
修复步骤
- 修正
serverless.yml的CORS配置- 如果你需要允许跨域凭证(比如跨域请求带Cookie、授权头),不能使用
*作为允许源,要替换为你实际的前端域名,同时在provider.httpApi.cors下添加allowCredentials: true配置;如果不需要凭证,直接删除Lambda返回头里的Access-Control-Allow-Credentials: true配置,浏览器不允许*源和允许凭证的配置同时生效,会直接拦截跨域请求。 - 删除
allowedHeaders列表中所有Access-Control-开头的项,这些是跨域响应头,不属于前端发送的请求头,加入允许列表会导致预检请求校验失败。
- 如果你需要允许跨域凭证(比如跨域请求带Cookie、授权头),不能使用
- 删除多余的OPTIONS事件配置
AWS HTTP API开启CORS配置后会自动处理所有OPTIONS预检请求,不需要手动为每个接口添加OPTIONS事件。你当前配置的OPTIONS handler会覆盖网关的默认处理逻辑,直接导致CORS失效,删除getOTP下的OPTIONS类型httpApi事件即可。 - 统一CORS头处理逻辑
不要同时在网关和Lambda两侧配置CORS响应头,避免冲突:要么完全走网关层面的CORS配置,删除Lambda返回值里所有Access-Control-开头的响应头;要么完全关闭网关层面的CORS配置,所有CORS响应头都在Lambda代码中返回。 - 部署验证
调整完成后重新执行serverless deploy部署,部署完成后可以用curl命令发送预检请求验证配置是否生效:
查看返回的响应头中是否包含正确的CORS相关配置即可。curl -X OPTIONS <你的API接口地址> \ -H "Origin: <你的前端域名>" \ -H "Access-Control-Request-Method: POST" \ -v
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

