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

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: *无法解决预请求失败的问题,需从配置和代码两方面修复:

  1. 配置层面设置CORS
    进入Lambda函数的「配置」→「函数URL」→「编辑」,在「跨源资源共享(CORS)」部分:
    • 勾选「启用CORS」
    • 允许的来源设为http://localhost:4200(避免用*,Angular开发环境的请求可能携带凭证,*不支持带凭证的跨域请求)
    • 允许的方法勾选POST和OPTIONS(预请求用OPTIONS方法)
    • 允许的标头设为*,保存配置
  2. 代码层面处理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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 18:20:06