当我尝试通过 REST API 运行 AWS Lambda 函数时,没有 CORS 错误。我已经尝试了所有可以在网上找到的潜在修复/解决方案。没有运气

问题描述 投票:0回答:1

尝试通过 JS 代码中的 API 调用(通过 API 网关设置)触发我的 Lambda 函数。

尽管启用了 CORS,并在“集成响应”部分中将标头映射设置为此,但我还是收到了“无 CORS”错误:

|| || |method.response.header.Access-Control-Allow-Credentials|'true'| |method.response.header.Access-Control-Allow-Headers|'内容类型,X-Amz-日期,授权,X-Api-Key,X-Amz-安全令牌'| |method.response.header.Access-Control-Allow-Methods|'DELETE、GET、HEAD、OPTIONS、PATCH、POST、PUT'| |method.response.header.Access-Control-Allow-Origin|'*'| |method.response.header.Access-Control-Expose-Headers|'内容类型、X-Amz-日期、授权、X-Api-Key、X-Amz-Security-Token'|

尽管在 Lambda 函数响应本身中公开返回标头:

return {

statusCode: 200,

headers: {

'Access-Control-Allow-Credentials': '*', // Allow credentials

'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token', // Headers allowed in requests

'Access-Control-Allow-Methods': 'DELETE,GET,HEAD,OPTIONS,PATCH,POST,PUT', // Allowed HTTP methods

'Access-Control-Allow-Origin': '*', // Origin allowed for CORS (use '*' to allow all origins or specify a domain)

'Access-Control-Expose-Headers': 'Content-Type, X-Amz-Date, Authorization, X-Api-Key, X-Amz-Security-Token' // Expose these headers to the client

},

body: JSON.stringify({ message: 'CORS settings applied successfully' })

};

我真的也尝试过你能想象到的所有这些事情的每一种变体:从标头响应、标头映射中包含/排除这些项目中的每一项,确保所有项目完美匹配,仅在响应等。是的,我部署 API 并部署每次更改的 Lambda 函数代码。

实际上,我在每个 StackOverflow 帖子上读到的修复程序都不起作用。我只是没有想法,完全放弃了。

有什么想法吗?谢谢。

错误会显示:

“...已被 CORS 策略阻止:请求的资源上不存在“Access-Control-Allow-Origin”标头。如果不透明响应满足您的需求,请将请求的模式设置为“no-cors”以获取禁用 CORS 的资源。”

“...已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:它没有 HTTP 正常状态。”

我的JS:

    async function callLambda() {
    const apiKey = '123123blahblah';  // omitted for StackOverflow post
    const lambdaData = {
        'message': 'hello'
    };

    const lambdaInvokeUrl = 'https://blah123.execute-api.us-east-2.amazonaws.com/blahblah1';

    try {
        const response = await fetch(lambdaInvokeUrl, {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
                'X-Api-Key': apiKey
            },
            body: JSON.stringify(lambdaData)
        });

        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }

        const result = await response.json();
        console.log("RESPONSE:", result);
    } catch (error) {
        console.error("Error:", error);
    }
}

集成请求设置(对于任何)部分:

enter image description here

积分响应设置(针对选项部分):

enter image description here

默认网关响应 4xx 和 5xx 设置为具有相同的标头

amazon-web-services aws-lambda cors
1个回答
0
投票

在“API 网关资源”选项卡中,我必须单击“任何”,对于“集成响应”和“方法响应”,我必须使标头映射与选项的确切设置完全匹配。这就是让它发挥作用的原因。

© www.soinside.com 2019 - 2024. All rights reserved.