AWS FunctionURL遇合法CORS错误仍执行Lambda代码问题排查
Lambda FunctionURL移除CORS允许源后仍执行代码的原因分析
核心原因:CORS是浏览器端的安全限制,而非服务端拦截机制
- 当浏览器发起跨域请求时,CORS的校验逻辑完全在浏览器侧执行:
- 对于非简单请求,浏览器会先发送OPTIONS预检请求,若预检不通过(比如源不在允许列表),浏览器会阻止将实际请求的响应返回给前端,抛出CORS错误,但实际的业务请求已经发送到Lambda,代码已经执行完毕。
- 对于简单请求(如GET/POST且Content-Type为text/plain等),浏览器会直接发送请求,Lambda执行代码后返回响应,浏览器检查响应头的
Access-Control-Allow-Origin不匹配时才抛出错误,但此时代码早已执行。
和HTTP域名无关
不管新增的测试域名是HTTP还是HTTPS,都不会改变CORS的执行逻辑。只要浏览器判定请求是跨域的,就会触发CORS校验,但服务端(Lambda)不会因为CORS配置拒绝执行代码,只会在响应头中返回CORS相关字段,由浏览器决定是否报错。
如何真正拦截未授权访问
如果需要从服务端层面阻止未授权域名的请求执行业务代码,不能仅依赖FunctionURL的CORS配置,必须在Lambda代码中手动校验请求的Origin请求头:
- 在代码开头获取请求的
Origin值; - 与预设的允许源列表进行比对;
- 若不在列表内,直接返回
403 Forbidden响应,终止后续业务逻辑执行。
内容的提问来源于stack exchange,提问作者Taha Erden
相关产品推荐
相关产品推荐

