AWS CORS 没有“Access-Control-Allow-Origin”错误

问题描述

我正在尝试使用 JSON 向 AWS API 网关发送获取请求。这在邮递员那里工作正常,但是当我尝试使用 jquery 发送相同的请求时,我收到错误 has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. 我已经从 AWS 启用 CORS 并将 Access-Control-Allow-Origin 设置为通配符。 我遵循了本指南 https://medium.com/@peorth/using-jquery-to-access-a-aws-api-gateway-cors-afa11fd27f2a添加crossDomain: true 但它没有任何改变。 这是我的 jquery 请求:

var settings = {
        "url": "https://XXXX.execute-api.eu-west-2.amazonaws.com/default/function","crossDomain": "true","method": "GET","timeout": 0,"headers": {
            "Content-Type": "application/json","X-Amz-Content-Sha256": "XXXXXXX","X-Amz-Date": "20210201T172448Z","Authorization": "XXXX,SignedHeaders=content-type;host;x-amz-content-sha256;x-amz-date,Signature=XXXXXXX"
        },"data": JSON.stringify({"key":"1","id":"TST","action":"singleLed","value":r+""+g+""+b}),};

        $.ajax(settings).done(function (response) {
            console.log(response);
        });

我完全没有想法。我怎样才能让 API 正常工作,或者有没有其他方法可以在不涉及 CORS 的情况下将数据发布到 AWS?

解决方法

您需要确保您的请求响应与表单匹配:

{
    "statusCode": 200,"isBase64Encoded": False,"headers":{
       "Access-Control-Allow-Origin":"*","Access-Control-Allow-Methods":"GET"
    },"body":"success"
...
}

,

开始工作。 当我从 AWS 启用 CORS 时,它实际上并没有将所有必要的标头添加到集成响应中。一旦我编辑了这些标头映射并删除了身份验证以使用通配符,一切都开始工作了。