Aws lambda API网关&x2B;Lambda-CORS发行

Aws lambda API网关&x2B;Lambda-CORS发行,aws-lambda,aws-api-gateway,http-status-code-415,Aws Lambda,Aws Api Gateway,Http Status Code 415,我在API Gateway+Lambda的CORS集成方面遇到了持续的问题。我已经为与API关联的资源启用了CORs。通过Lambda测试、Postman测试等,一切似乎都正常工作,但从网页脚本调用api会出现以下错误“请求的资源上不存在“Access Control Allow Origin”头。因此不允许访问Origin“null”。响应的HTTP状态代码为415。”我需要更改Lambda函数吗?谢谢 这是我的简单Lambda代码 “严格使用”; var AWS=要求('AWS-sdk')

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

这是我的简单Lambda代码

“严格使用”;
var AWS=要求('AWS-sdk');
var dclient=new AWS.DynamoDB.DocumentClient();
var getItems=(事件、上下文、回调)=>{
变量参数={
TableName:“OMSCaseDataTest”,
关键:{
“IncidentID”:event.IncidentID
}
}
dclient.get(参数,(错误,数据)=>{
如果(错误){
回调(空,“发生错误”)
}否则{
回调(空,数据);
}
});
};

exports.getItems=getItems如果您在API网关中使用代理集成,则从API网关启用CORS不起作用。您必须从Lambda代码本身设置标题“Access Control Allow Origin”

它在文件中提到过

Python代码示例:

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

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


假设您使用的是代理集成,您需要自己处理COR。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',
        }
    });
}

选择问题标签时请小心。如何设置CORS取决于您使用的资源集成类型。如果你能进一步澄清你的问题,那会很有帮助的。你是如何建立CORS的?您正在使用什么样的资源集成?这份文件很有帮助:嗨,丹尼尔,谢谢你的回复。我已经在API网关中启用了CORS(根据AWS指南),并且我可以在选项响应方法中看到相应的响应头,即200的响应头:访问控制允许头、访问控制允许方法、访问控制允许源。我在一些线程中读到,Lambda函数也必须以某种方式进行修改,但找不到任何明确的说明。我正要问一个类似的问题,因为我正在努力解决这个问题。我决定在本地运行我的lambda express应用程序,发现实际上存在内部运行时错误。我猜在lambda中,当发生内部服务器错误时,API网关会返回CORS错误?另外,如果在推送更新之前使用放大功能,请确保您使用了放大功能构建。可能重复