AWS Lambda Function URL跨域问题:CORS允许源失效及请求方法限制异常
问题1:GET请求未被拒绝的原因及修复
- 先检查Lambda Function URL的配置页面,确认「允许的HTTP方法」仅勾选了
POST,未勾选GET。若之前误选了全量方法,修改后记得保存配置。 - 若配置已正确设置但仍生效,建议在函数代码中主动校验请求方法(避免配置延迟或异常导致的漏洞):
import json def lambda_handler(event, context): # 校验请求方法是否为POST if event['requestContext']['http']['method'] != 'POST': return { 'statusCode': 403, 'body': json.dumps('Method not allowed') } return { 'statusCode': 200, 'body': json.dumps('Hello from Lambda!!') }
问题2:CORS错误的原因及修复
你遇到的CORS问题核心是浏览器的OPTIONS预请求未被正确处理,仅在返回头加Access-Control-Allow-Origin: *无法解决预请求失败的问题,需从配置和代码两方面修复:
- 配置层面设置CORS
进入Lambda函数的「配置」→「函数URL」→「编辑」,在「跨源资源共享(CORS)」部分:- 勾选「启用CORS」
- 允许的来源设为
http://localhost:4200(避免用*,Angular开发环境的请求可能携带凭证,*不支持带凭证的跨域请求) - 允许的方法勾选
POST和OPTIONS(预请求用OPTIONS方法) - 允许的标头设为
*,保存配置
- 代码层面处理OPTIONS预请求
在函数中添加OPTIONS请求的处理逻辑,返回符合要求的CORS头:import json def lambda_handler(event, context): # 处理OPTIONS预请求 if event['requestContext']['http']['method'] == 'OPTIONS': return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Origin': 'http://localhost:4200', 'Access-Control-Allow-Methods': 'POST, OPTIONS', 'Access-Control-Allow-Headers': '*' }, 'body': json.dumps('') } # 校验是否为POST请求 elif event['requestContext']['http']['method'] != 'POST': return { 'statusCode': 403, 'headers': { 'Access-Control-Allow-Origin': 'http://localhost:4200' }, 'body': json.dumps('Method not allowed') } # 处理正常POST请求 return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Origin': 'http://localhost:4200' }, 'body': json.dumps('Hello from Lambda!!') }
额外注意
配置层面的方法限制和代码层面的校验/跨域处理结合使用,能避免单一配置失效导致的问题;若必须用*作为允许来源,需确保请求不携带任何身份凭证(如Cookie、Authorization头),否则浏览器会直接拒绝响应。
内容的提问来源于stack exchange,提问作者Taha Erden
相关产品推荐
相关产品推荐

