"启用CORS"在AWS API网关资源中?

时间:2017-09-12 14:15:12

标签: angular amazon-web-services typescript aws-api-gateway put

我在使用AWS API Gateway时遇到问题。 我正在使用Angular 4(使用TypeScript语言)开发Web应用程序,但是如果我从前端调用PUT方法, 出现以下错误消息:

Method PUT is not allowed by Access-Control-Allow-Methods in preflight response.

并且它非常奇怪,因为在AWS控制台中,PUT方法运行良好(我在部署后直接从API网关控制台进行了许多测试,并且一切运行良好)。如果我去"动作/启用CORS"所有方法都有检查,包括PUT方法,我不能准确解释API网关的问题。

如果在API网关中看起来一切正常,为什么会出现此错误?有没有办法改变这些CORS?

2 个答案:

答案 0 :(得分:0)

请按照以下步骤进行操作

  1. 在/ services资源
  2. 下创建一个新的OPTIONS方法
  3. 在OPTIONS方法中创建并填充Access-Control-Allow-Origin / Method / Headers。
  4. 创建OPTIONS后启用CORS,如下所示

    enter image description here

    来源: - https://forums.aws.amazon.com/thread.jspa?messageID=644489

答案 1 :(得分:0)

我记得不久前被同样的问题打What ...

使用Lambda或HTTP代理集成时,您需要至少在lambda的响应中指定Access-Control-Allow-Origin标头。您可能已指定其他(目前没有任何可用的代码)。我确实记得此消息有些误导,并且由于控制台执行测试的原因,并没有真正使用CORS,因此可以从管理控制台进行测试。

请查看Enabling CORS for a REST API resource

中的最后一部分
exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Headers" : "Content-Type",
            "Access-Control-Allow-Origin": "https://www.example.com",
            "Access-Control-Allow-Methods": "OPTIONS,POST,GET"
        },
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

您需要将Access-Control-Allow-Origin替换为客户端应用程序使用的主机名。作为快速测试,请使用*,但不要投入生产,因为这违反了CORS的目的。