AWS API Gateway 中的 CORS 配置

Posted

技术标签:

【中文标题】AWS API Gateway 中的 CORS 配置【英文标题】:CORS configuration in AWS API Gateway 【发布时间】:2018-07-13 23:07:25 【问题描述】:

我正在为我的一个应用程序使用 AWS API Gateway 和 Lambda 函数。

当我向 API Gateway 发送 POST 请求时,会导致错误:

“Access-Control-Allow-Origin”标头出现在请求的 资源。因此不允许使用原点“http://localhost:8888” 使用权。响应的 HTTP 状态代码为 400

我在 API Gateway 控制台中启用了 CORS,并将“Access-Control-Allow-Origin”添加到“Access-Control-Allow-Headers”并单击“启用 CORS 并替换现有的 CORS 标头”按钮。成功了。

但是当我重新加载页面时,我发现“Access-Control-Allow-Headers”中没有“Access-Control-Allow-Headers”标头。

我不知道为什么 AWS 不允许我编辑“Access-Control-Allow-Headers”。

【问题讨论】:

你有资源的 OPTIONS 方法吗? @YevheniiHerasymchuk 是的 您是否在 POST 请求中发送了正确的标头?请发布您的 POST 方法。 docs.aws.amazon.com/AmazonS3/latest/dev/cors.html 【参考方案1】:

我在 API Gateway 控制台中启用了 CORS,并将“Access-Control-Allow-Origin”添加到“Access-Control-Allow-Headers”,然后单击“启用 CORS 并替换现有的 CORS 标头”按钮。成功了。

好的,这是两个完全独立的标题。 Access-Control-Allow-Origin 是一个响应标头,必须发送它以响应预检 OPTIONS 请求和实际的 POST/GET 请求。 Access-Control-Allow-Headers 是一个单独的响应标头,仅在响应预检 OPTIONS 请求时发送。

您能否提供一个屏幕截图,准确显示您在哪里输入的内容?

【讨论】:

【参考方案2】:

我刚刚在 AWS Gateway 中为我的两个 API 启用了 CORS。

即使在网关 API CORS 设置中启用了 CORS,由于这些原因,我也遇到了 CORS 问题。

    CORS 设置:这是起点。在 API Gateway 上的 CORS 设置中,允许您使用 CORS。 在调试 CORS 问题之前,您可以保留限制最少的设置,如下所示。 Access-Control-Allow-Origin=*

访问控制允许方法:POST、GET、OPTIONS、DELETE (您甚至可以在调试期间添加所有标题)

Access-Control-Max-Age=0

Access-Control-Expose-Headers,Access-Control-Allow-Headers 可以保留为默认值。

    Null Origin:对于本地开发,我直接从文件系统运行我的前端应用程序,而没有 Web 服务器。 AWS CORS 设置不支持空源。然后我在 nodejs http-server 上托管了我的本地应用程序。现在应用程序具有原始 localhost。而且 CORS 设置在我的一个 API 上运行良好。

    API 路径必须匹配。对于第二个 API,我仍然面临 CORS 问题。尽管具有与其他 API 相同的设置并托管在 Web 服务器上。这里的问题是这个 API 在根有集成,在这种情况下,API 必须以 / 结尾。我只关注问题出在其他地方的 CORS 设置,这很烦人。

如果 CORS 设置不适合您,您可能需要实现根 OPTION 并返回正确的 CORS 标头。

【讨论】:

以上是关于AWS API Gateway 中的 CORS 配置的主要内容,如果未能解决你的问题,请参考以下文章

如何在 API Gateway 和 React 应用程序之间启用 AWS 中的 CORS 策略?

AWS API Gateway 429 响应 - 没有 CORS 标头

AWS API Gateway CORS 问题 - JS

AWS API Gateway API 密钥与 Cors

AWS CDK API Gateway 启用 Cors

AWS API Gateway CORS 问题