为 API Gateway REST API 资源启用 CORS
Posted cloudrivers
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为 API Gateway REST API 资源启用 CORS相关的知识,希望对你有一定的参考价值。
跨源资源共享 (CORS) 是一项浏览器安全功能,该功能限制从在浏览器中运行的脚本启动的跨源 HTTP 请求。如果您的 REST API 的资源接收非简单跨源 HTTP 请求,您需要启用 CORS 支持。
启用 CORS 支持意味着什么
当浏览器接收非简单 HTTP 请求时,CORS 协议将要求浏览器在发送实际请求之前向服务器发送一个预检请求,并等待服务器的批准(或请求凭证)。预检请求 将向您的 API 显示为 HTTP 请求:
-
包含一个
Origin
标头。 -
使用
OPTIONS
方法。 -
包含以下标头:
-
Access-Control-Request-Method
-
Access-Control-Request-Headers
-
因此,为了支持 CORS,REST API 资源需要实施一个 OPTIONS
方法,该方法可以响应 OPTIONS
预检请求,该请求至少具有由 Fetch 标准强制执行的以下响应标头:
-
Access-Control-Allow-Methods
-
Access-Control-Allow-Headers
-
Access-Control-Allow-Origin
启用 CORS 支持的方式取决于您的 API 的集成类型。
使用 API Gateway 控制台在资源上启用 CORS
您可以使用 API Gateway 控制台为已创建的 REST API 资源上的一个或所有方法启用 CORS 支持。
重要
资源可以包含子资源。为某个资源及其方法启用 CORS 支持不会以递归方式为子资源及其方法启用它。
在 REST API 资源上启用 CORS 支持
-
通过 https://console.aws.amazon.com/apigateway 登录 API Gateway 控制台。
-
从 API 列表中选择 API。
-
在 Resources (资源) 下选择一个资源。这将为资源上的所有方法启用 CORS。
或者,您也可以在资源下选择一个方法,仅为此方法启用 CORS。
-
从操作下拉菜单中选择 Enable CORS (启用 CORS)。
-
在 Enable CORS (启用 CORS) 表单中,执行以下操作:
-
在 Access-Control-Allow-Headers 输入字段中,键入客户端必须在实际资源请求中提交的逗号分隔标头列表的静态字符串。使用控制台提供的
‘Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token‘
标头列表,或指定您自己的标头。 -
将控制台提供的
‘*‘
的值用作 Access-Control-Allow-Origin 标头值,以允许来自所有源的访问请求,或指定允许访问该资源的源。 -
选择 Enable CORS and replace existing CORS headers (启用 CORS 并替换现有 CORS 标头)。
重要
如果在代理集成中将以上说明应用于
ANY
方法,那么将不会设置任何适用的 CORS 标头。相反,您的后端必须返回适用的 CORS 标头,例如Access-Control-Allow-Origin
。 -
-
在 Confirm method changes (确认方法更改) 中,选择 Yes, overwrite existing values (对,覆盖现有值) 以确认新的 CORS 设置。
在 GET
方法上启用 CORS 后,如果资源中没有 OPTIONS
方法,则该方法将添加到资源中。OPTIONS
方法的 200
响应会自动配置为返回三个 Access-Control-Allow-*
标头,以完成预检握手。此外,默认情况下,实际 (GET
) 方法还会配置为在 200 响应内返回 Access-Control-Allow-Origin
标头。对于其他类型的响应,如果您不希望返回 Cross-origin access
错误,您将需要手动对其进行配置,以返回带有“*”或特定源的 Access-Control-Allow-Origin‘
标头。
在您的资源上启用 CORS 支持后,您必须部署或重新部署 API 以使新设置生效。有关更多信息,请参阅从 API Gateway 控制台部署 REST API。
以上是关于为 API Gateway REST API 资源启用 CORS的主要内容,如果未能解决你的问题,请参考以下文章
我的带有 lambda 函数的 AWS API Gateway REST API 返回 Null,如何解决这个问题?
在 API Gateway 中设置阶段 » 为 REST API 部署设置阶段变量Stage variables
apigee gateway、authn 和 authz:REST API 调用另一个 REST API
如何保护 AWS Gateway REST API 可通过可公开访问的网页进行访问 (React)