CORS策略从Lambda正确返回,但是客户端仍然出现Access-Control-Allow-Origin错误

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

我正在尝试对具有配置的GET和OPTIONS调用响应的lamba端点进行简单调用。

    $.ajax({
        url: 'https://3yphvgt4dc.execute-api.us-west-2.amazonaws.com/test-cors/get-courses',
        type: "GET",
        headers: {
            'iSCourse': 'False',
            'Name': 'Ruth Anderson'
        },
        success: function(result) {
            console.log(result);
        }
    });

但是每次从客户端发送此请求时,都会出现以下错误:

Access to XMLHttpRequest at 'https://3yphvgt4dc.execute-api.us-west-2.amazonaws.com/test-cors/get-courses' from origin 'http://127.0.0.1:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

现在这很有趣。据我所知,我已经正确配置了端点,您可以在客户端中看到它

enter image description here

这里是选项调用(如chrome网络调试器所示)

enter image description hereenter image description hereenter image description here

您可以在此处看到“ access-control-allow-origin:*”的设置。

但是错误仍然是由于抱怨该问题而引起的。enter image description hereenter image description hereenter image description here产生的错误在此帖子的顶部附近。

因此,总的来说,我很难弄清楚为什么在这种情况下请求没有通过。有什么想法吗?

javascript amazon-web-services cors
2个回答
0
投票

502完全是服务器问题。应该首先解决该问题,并请确保cors无法正常工作。


0
投票

您收到的CORS错误不是客户端问题,而是服务器端,如您收到的错误所指示:

所请求的资源上没有'Access-Control-Allow-Origin'标头。

这是说您通过API网关请求的Lambda资源没有在其响应中返回Access-Control-Allow-Origin标头。

要解决此问题,您需要做两件事。首先,请确保在您的API网关上启用了CORS(OPTIONS请求的响应表明已启用,但应进行验证)。

第二,在Lambda返回的响应中添加Access-Control-Allow-Origin: *标头。您尚未指定Lambda所使用的语言,但是如果使用的是NodeJS,则返回的代码片段可能类似于:

    const result = {
        statusCode: 200,
        headers: {
            'Access-Control-Allow-Origin': '*',
            // other required headers
        },
        body: object_you_are_returning
    };

    return result;

您可以参考AWS Docs here了解有关此错误的更多信息。在这种情况下,您的错误是缺少标题access-control-allow-origin,因此将其(和其他任何必需的标题)添加到响应中将解决此问题。

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