

# CORS 配置的元素
<a name="ManageCorsUsing"></a>

要将您的存储桶配置为允许跨源请求，创建一个 CORS 配置。CORS 配置是一个包含元素的文档，这些元素标识可访问您的存储桶的源、对于每个源将支持的操作（HTTP 方法）以及其它操作特定的信息。您可以向配置添加最多 100 条规则。您可以将 CORS 配置作为 `cors` 子资源添加到存储桶中

如果要在 S3 控制台中配置 CORS，则必须使用 JSON 来创建 CORS 配置。新的 S3 控制台仅支持 JSON CORS 配置。

有关 CORS 配置及其中元素的更多信息，请参阅以下主题。有关如何添加 CORS 配置的说明，请参阅 [配置跨源资源共享 (CORS)](enabling-cors-examples.md)。

**重要**  
在 S3 控制台中，CORS 配置必须是 JSON。

**Topics**
+ [

## `AllowedMethods` 元素
](#cors-allowed-methods)
+ [

## `AllowedOrigins` 元素
](#cors-allowed-origin)
+ [

## `AllowedHeaders` 元素
](#cors-allowed-headers)
+ [

## `ExposeHeaders` 元素
](#cors-expose-headers)
+ [

## `MaxAgeSeconds` 元素
](#cors-max-age)
+ [

## CORS 配置的示例
](#cors-example-1)

## `AllowedMethods` 元素
<a name="cors-allowed-methods"></a>

在 CORS 配置中，您可以为 `AllowedMethods` 元素指定以下值。
+ GET
+ PUT
+ POST
+ DELETE
+ HEAD

## `AllowedOrigins` 元素
<a name="cors-allowed-origin"></a>

在 `AllowedOrigins` 元素中，可指定您希望允许从中发送跨源请求的源，例如 ` http://www.example.com`。源字符串只能包含至少一个 `*` 通配符，例如 `http://*.example.com`。您可以选择将 `*` 指定为源，以允许所有源发送跨源请求。您还可以指定 `https` 只允许安全的源。

## `AllowedHeaders` 元素
<a name="cors-allowed-headers"></a>

`AllowedHeaders` 元素通过 `Access-Control-Request-Headers` 标头指定预检请求中允许哪些标头。`Access-Control-Request-Headers` 标头中的每个标头名称必须匹配元素中的相应条目。Amazon S3 将仅发送请求的响应中允许的标头。有关适用于发送至 Amazon S3 的请求中的标头示例列表，请参阅 *Amazon Simple Storage Service API 参考*指南中的[常见请求标头](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTCommonRequestHeaders.html)。

配置中的每个 AllowedHeaders 字符串都可以包含至少一个 \$1 通配符。例如，`<AllowedHeader>x-amz-*</AllowedHeader>` 将允许所有特定于 Amazon 的标头。

## `ExposeHeaders` 元素
<a name="cors-expose-headers"></a>

每个 `ExposeHeader` 元素标识您希望客户能够从其应用程序 (例如，从 JavaScript `XMLHttpRequest` 对象) 进行访问的响应标头。有关常见的 Amazon S3 响应标头的列表，请参阅 *Amazon Simple Storage Service API 参考*指南中的[常见响应标头](https://docs.amazonaws.cn/AmazonS3/latest/API/RESTCommonResponseHeaders.html)。

## `MaxAgeSeconds` 元素
<a name="cors-max-age"></a>

`MaxAgeSeconds` 元素指定在预检请求被资源、HTTP 方法和源识别之后，浏览器将为预检请求缓存响应的时间 (以秒为单位)。

## CORS 配置的示例
<a name="cors-example-1"></a>

您可以使用您自己的域（例如 `example1.com`）提供您的内容，而不是通过使用 Amazon S3 网站端点访问网站。有关如何使用您自己的域的信息，请参阅 [教程：使用注册到 Route 53 的自定义域配置静态网站](website-hosting-custom-domain-walkthrough.md)。

以下示例 CORS 配置具有三个规则，这些规则被指定为 `CORSRule` 元素：
+ 第一个规则允许来自 `http://www.example1.com` 源的跨源 PUT、POST 和 DELETE 请求。该规则还通过 `Access-Control-Request-Headers` 标头允许预检 OPTIONS 请求中的所有标头。作为对预检 OPTIONS 请求的响应，Amazon S3 将返回请求的标头。
+ 第二个规则允许与第一个规则具有相同的跨源请求，但第二个规则应用于另一个源 `http://www.example2.com`。
+ 第三个规则允许来自所有源的跨源 GET 请求。`*` 通配符将引用所有源。

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example1.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example2.com"
        ],
        "ExposeHeaders": []
    },
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]
```

------
#### [ XML ]

```
<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>http://www.example1.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>http://www.example2.com</AllowedOrigin>

   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>

   <AllowedHeader>*</AllowedHeader>
 </CORSRule>
 <CORSRule>
   <AllowedOrigin>*</AllowedOrigin>
   <AllowedMethod>GET</AllowedMethod>
 </CORSRule>
</CORSConfiguration>
```

------

CORS 配置还允许可选的配置参数，如下面的 CORS 配置所示。在本示例中，CORS 配置允许来自 `http://www.example.com` 源的跨源 PUT、POST 和 DELETE 请求。

------
#### [ JSON ]

```
[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example.com"
        ],
        "ExposeHeaders": [
            "x-amz-server-side-encryption",
            "x-amz-request-id",
            "x-amz-id-2"
        ],
        "MaxAgeSeconds": 3000
    }
]
```

------
#### [ XML ]

```
<CORSConfiguration>
 <CORSRule>
   <AllowedOrigin>http://www.example.com</AllowedOrigin>
   <AllowedMethod>PUT</AllowedMethod>
   <AllowedMethod>POST</AllowedMethod>
   <AllowedMethod>DELETE</AllowedMethod>
   <AllowedHeader>*</AllowedHeader>
  <MaxAgeSeconds>3000</MaxAgeSeconds>
  <ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
  <ExposeHeader>x-amz-request-id</ExposeHeader>
  <ExposeHeader>x-amz-id-2</ExposeHeader>
 </CORSRule>
</CORSConfiguration>
```

------

上述配置中的 `CORSRule` 元素包括以下可选元素：
+ `MaxAgeSeconds` — 指定在 Amazon S3 针对特定资源的预检 OPTIONS 请求作出响应后，浏览器缓存该响应的时间（以秒为单位，在本示例中为 3000 秒）。通过缓存响应，在需要重复原始请求时，浏览器无需向 Amazon S3 发送预检请求。
+ `ExposeHeaders` – 识别可让客户从应用程序 (例如，从 JavaScript `x-amz-server-side-encryption` 对象) 进行访问的响应标头 (在本示例中，为 `x-amz-request-id`、`x-amz-id-2` 和 `XMLHttpRequest`)。