3

我在 API Gateway + Lambda 的 CORS 集成方面遇到了持续的问题。我已经为与 API 关联的资源启用了 COR。通过 Lambda 测试、邮递员测试等,一切似乎都可以正常工作,但从网页脚本调用 api 会出现以下错误“请求的资源上不存在 'Access-Control-Allow-Origin' 标头。来源 'null' 是因此不允许访问。响应的 HTTP 状态代码为 415。” 我需要更改 Lambda 函数吗?谢谢

这是我的简单 Lambda 代码..

'use strict';
var AWS = require('aws-sdk');
var dclient = new AWS.DynamoDB.DocumentClient();
var getItems = (event, context, callback) => {

    var params = {
        TableName: "OMSCaseDataTest",
        Key: {
            "IncidentID": event.IncidentID
        }
    }
    dclient.get(params, (error, data) => {
        if (error) {
            callback(null, "error occured")
        } else {
            callback(null, data);

        }
    });
};
exports.getItems = getItems;

4

3 回答 3

3

如果您在 API Gateway 中使用代理集成,则无法从 API Gateway 启用 CORS。您必须从 Lambda 代码本身设置标头“Access-Control-Allow-Origin”。

它在文档中提到。

Python 代码示例:

response = {
    'statusCode': 200,
    'headers': {
        'Access-Control-Allow-Origin': '*'
    },
    'body': json.dumps({'message': 'CORS enabled')
}
return response
于 2019-02-18T11:55:42.770 回答
3

假设您使用代理集成,您需要自己处理 CORS。您的 lambda 函数将需要以不同的方式处理 HTTP 方法。CORS 问题通常发生在未接受飞行前选项请求时。这是一个代码片段可以帮助您的事业。

function main(event, context, lambdaCallback) {
    if (event.httpMethod === 'OPTIONS') {
        doneOptions(200, '{"status": "OK"}', 'application/json', lambdaCallback);
    } else if (event.httpMethod === 'POST') {
        // do your POST here
    } else {
        return done(400, '{"message":"Invalid HTTP Method"}', 'application/json', lambdaCallback);
    }
}

将 HTTP 200 返回到您的前端的函数决定了您的前端/API 可以调用什么以及不可以调用什么。

function doneOptions(statusCode, body, contentType, lambdaCallback, isBase64Encoded = false) {
    lambdaCallback(null, {
        statusCode: statusCode,
        isBase64Encoded: isBase64Encoded,
        body: body,
        headers: {
            'Content-Type': contentType,
            'Access-Control-Allow-Origin': '*',
            'Access-Control-Allow-Headers': 'Authorization,Content-Type',
            'Access-Control-Allow-Method': 'GET,POST,OPTIONS',
        }
    });
}
于 2020-07-21T04:34:15.770 回答
1

有时 lambda 超时会导致 CORS 错误。您可以增加超时时间,这可能会解决问题。

在此处输入图像描述

于 2020-05-26T07:43:48.337 回答