首页 文章

AWS API Gateway的CORS问题

提问于
浏览
2

我从我的网页发送post请求到AWS API Gateway,它正在调用lambda函数 . 在API网关中启用CORS .

错误:

无法加载api_gatewau_url:请求的资源上没有“Access-Control-Allow-Origin”标头 . 因此不允许原点'url'访问 .

该资源有两种方法:

  • OPTIONS(集成MOCK)

  • POST(集成Lambda)

如何解决CORS问题?

以下是发送邮件请求的代码 .

$.ajax({
    type: "POST",
    crossDomain: true,
    url: "api_gateway_url",
    data: JSON.stringify({
        "param1": value1,
        "param2": value2
    }),

我还试图添加带有allow origin true的 Headers ,但没有运气 .
最奇怪的是,相同的配置和请求我尝试使用不同的api网关然后它工作正常,没有任何错误 .

2 回答

  • 1

    根据您的集成类型,您需要返回COR的标头 .

    更多细节可以在,

    https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#The_HTTP_response_headers

    如果您使用的是任何集成,则可以从Lambda或要集成的其他源返回标头 .

    对于Lambda,

    module.exports.hello = function(event, context, callback) {
    
        const response = {
          statusCode: 200,
          headers: {
            "Access-Control-Allow-Origin" : "https://domain:port", // Required for CORS support to work
            "Access-Control-Allow-Credentials" : true // Required for cookies, authorization headers with HTTPS
          },
          body: JSON.stringify({ "message": "Hello World!" })
        };
    
        callback(null, response);
    };
    

    如果您使用的是S3,

    https://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-cors-configuration.html

    API Gateway CORS Mapping:

    https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

    希望能帮助到你 .

  • 1

    如果您在API网关中使用代理集成,则从API网关启用CORS不起作用 . 您必须从Lambda代码本身设置Header'Access-Control-Allow-Origin' .

    它在doc中提到过 .

    Python代码示例:

    response = {
            'statusCode': 200,
            'headers': {
                'Access-Control-Allow-Origin': '*'
            },
            'body': json.dumps({'message': 'CORS enabled')
        }
        return response
    

相关问题