针对 API Gateway 中的 REST API 的 CORS
跨源资源共享 (CORS)
确定是否启用 CORS 支持
跨源 HTTP 请求将向以下项发出:
-
一个不同的域(例如,从
example.com
到amazondomains.com
) -
一个不同的子域(例如,从
example.com
到petstore.example.com
) -
一个不同的端口(例如,从
example.com
到example.com:10777
) -
一个不同的协议(例如,从
https://example.com
到http://example.com
)
如果您无法访问自己的 API 并收到包含 Cross-Origin Request Blocked
的错误消息,则可能需要启用 CORS。
跨源 HTTP 请求可分为两种类型:简单 请求和非简单 请求。
为简单请求启用 CORS
如果满足以下所有条件,则 HTTP 请求为简单 请求:
-
其针对仅允许
GET
、HEAD
和POST
请求的 API 资源发出。 -
如果它是一个
POST
方法请求,则它必须包含Origin
标头。 -
请求负载内容类型为
text/plain
、multipart/form-data
或application/x-www-form-urlencoded
。 -
请求不包含自定义标头。
-
简单请求的 Mozilla CORS 文档
中列出的任何其他要求。
对于简单的跨源 POST
方法请求,来自资源的响应需要包含标头 Access-Control-Allow-Origin: '*'
或 Access-Control-Allow-Origin:
。'origin'
所有其他跨源 HTTP 请求均为非简单 请求。
为非简单请求启用 CORS
如果 API 的资源收到非简单请求,则必须根据集成类型启用额外的 CORS 支持。
为非代理集成启用 CORS
对于这些集成,CORS 协议
要创建预检响应,请执行以下操作:
使用模拟集成创建
OPTIONS
方法。-
将以下响应标头添加到 200 方法响应中:
-
Access-Control-Allow-Headers
-
Access-Control-Allow-Methods
-
Access-Control-Allow-Origin
-
-
将集成传递行为设置为
NEVER
。在这种情况下,将拒绝未映射内容类型的方法请求,并返回“HTTP 415 不支持的媒体类型”响应。有关更多信息,请参阅集成传递行为。 -
输入响应标头的值。要允许所有来源、所有方法和通用标头,请使用以下标头值:
-
Access-Control-Allow-Headers: 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'
-
Access-Control-Allow-Methods: '*'
-
Access-Control-Allow-Origin: '*'
-
创建预检请求后,对于至少所有 200 响应,必须为所有启用 CORS 的方法返回 Access-Control-Allow-Origin: '*'
或 Access-Control-Allow-Origin:
标头。'origin'
使用 AWS Management Console为非代理集成启用 CORS
您可以使用 AWS Management Console来启用 CORS。API Gateway 会创建 OPTIONS
方法,并尝试将 Access-Control-Allow-Origin
标头添加到现有的方法集成响应中。这并不总是有效,有时您需要手动修改集成响应,以便为至少所有 200 响应的所有启用 CORS 的方法返回 Access-Control-Allow-Origin
标头。
为代理集成启用 CORS 支持
对于 Lambda 代理集成或 HTTP 代理集成,您的后端负责返回 Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和 Access-Control-Allow-Headers
标头,因为代理集成不返回集成响应。
以下 Lambda 函数示例返回所需的 CORS 标头: