

# 使用跨源资源共享 (CORS)
<a name="cors"></a>

跨源资源共享 (CORS) 定义了在一个域中加载的客户端 Web 应用程序与另一个域中的资源交互的方式。借助 CORS 支持，您可以使用 Amazon S3 构建各种富客户端 Web 应用程序，并选择性地允许跨源访问您的 Amazon S3 资源。

本部分提供 CORS 概述。副主题介绍如何通过使用 Amazon S3 控制台或通过以编程方式使用 Amazon S3 REST API 和 AWS SDK 来启用 CORS。

## 跨源资源共享：使用案例场景
<a name="example-scenarios-cors"></a>

以下是有关使用 CORS 的示例场景。

**方案 1**  
假设您在名为 `website` 的 Amazon S3 存储桶中托管网站（如 [使用 Amazon S3 托管静态网站](WebsiteHosting.md) 中所述）。您的用户加载了网站端点。

```
http://website.s3-website.us-east-1.amazonaws.com
```

现在，您想要使用此存储桶中存储的网页上的 JavaScript，以使用该存储桶的 Amazon S3 API 端点 `website.s3.us-east-1.amazonaws.com` 向同一存储桶发送经身份验证的 GET 和 PUT 请求。浏览器通常会阻止 JavaScript 允许这些请求，但借助 CORS，您可以配置您的存储桶以显式支持来自 `website.s3-website.us-east-1.amazonaws.com` 的跨源请求。

**方案 2**  
假设您想要托管来自您的 S3 存储桶的 Web 字体。浏览器会再次要求对正在加载的 Web 字体进行 CORS 检查 (也称为预检)。您可以配置托管 Web 字体的存储桶，以允许任何源发出这些请求。

## Amazon S3 如何评估针对存储桶的 CORS 配置？
<a name="cors-eval-criteria"></a>

Amazon S3 收到来自浏览器的预检请求后，它将为存储桶评估 CORS 配置，并使用第一个匹配传入浏览器请求的 `CORSRule` 规则来允许跨源请求。要使规则实现匹配，必须满足以下条件：
+ 向存储桶发出的 CORS 请求中的 `Origin` 标头必须与 CORS 配置的 `AllowedOrigins` 元素中的源相匹配。
+ 在向存储桶发出的 CORS 请求的 `Access-Control-Request-Method` 中指定的 HTTP 方法，必须与在 CORS 配置的 `AllowedMethods` 元素中列出的一个或多个方法相匹配。
+ 预检请求的 `Access-Control-Request-Headers` 标头中列出的标头必须与 CORS 配置的 `AllowedHeaders` 元素中的标头相匹配。

**注意**  
对存储桶启用 CORS 时，ACL 和策略将继续适用。

## 对象 Lambda 接入点如何支持 CORS
<a name="cors-olap-cors"></a>

当 S3 对象 Lambda 收到来自浏览器的请求或包含 `Origin` 标头的请求时，S3 对象 Lambda 始终会添加 `"AllowedOrigins":"*"` 标头字段。

有关使用 CORS 的更多信息，请参阅以下主题。

**Topics**
+ [跨源资源共享：使用案例场景](#example-scenarios-cors)
+ [Amazon S3 如何评估针对存储桶的 CORS 配置？](#cors-eval-criteria)
+ [对象 Lambda 接入点如何支持 CORS](#cors-olap-cors)
+ [CORS 配置的元素](ManageCorsUsing.md)
+ [配置跨源资源共享 (CORS)](enabling-cors-examples.md)
+ [测试 CORS](testing-cors.md)
+ [CORS 问题排查](cors-troubleshooting.md)