

# 测试 CORS
<a name="testing-cors"></a>

要测试 CORS 配置，可以使用 `OPTIONS` 方法发送 CORS 预检请求，以便服务器在可以接受发送该请求的情况下做出响应。Amazon S3 收到预检请求后，S3 会为存储桶评估 CORS 配置，并使用第一个与传入请求匹配的 `CORSRule` 规则来启用跨源请求。要使规则实现匹配，必须满足以下条件：
+ 向存储桶发出的 CORS 请求中的 `Origin` 标头必须与 CORS 配置的 `AllowedOrigins` 元素中的源相匹配。
+ 在向存储桶发出的 CORS 请求的 `Access-Control-Request-Method` 中指定的 HTTP 方法，必须与在 CORS 配置的 `AllowedMethods` 元素中列出的一个或多个方法相匹配。
+ 预检请求的 `Access-Control-Request-Headers` 标头中列出的标头必须与 CORS 配置的 `AllowedHeaders` 元素中的标头相匹配。

以下是 CORS 配置示例。要创建 CORS 配置，请参阅[配置 CORS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enabling-cors-examples.html)。有关 CORS 配置的更多示例，请参阅 [CORS 配置的元素](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ManageCorsUsing.html)。

有关配置 CORS 规则和对 CORS 规则进行故障排除的指导，请参阅 AWS re:Post 知识中心中的[如何在 Amazon S3 中配置 CORS，并通过 cURL 确认 CORS 规则？](https://repost.aws/knowledge-center/s3-configure-cors)

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

```
[
    {
        "AllowedHeaders": [
            "Authorization"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE"
        ],
        "AllowedOrigins": [
            "http://www.example1.com"
        ],
        "ExposeHeaders":  [
             "x-amz-meta-custom-header"
        ]
    
    }
]
```

------

要测试 CORS 配置，可以使用以下 CURL 命令发送预检 `OPTIONS` 检查。CURL 是一个命令行工具，可用于与 S3 进行交互。有关更多信息，请参阅 [CURL](https://curl.se/)。

```
 curl -v -X OPTIONS \
  -H "Origin: http://www.example1.com" \
  -H "Access-Control-Request-Method: PUT" \
  -H "Access-Control-Request-Headers: Authorization" \
  -H "Access-Control-Expose-Headers: x-amz-meta-custom-header"\
     "http://bucket_name.s3.amazonaws.com/object_prefix_name"
```

在上面的示例中，`curl -v -x OPTIONS` 命令用于向 S3 发送预检请求，来查询 S3 是否支持从跨源 `http://www.example1.com` 发送对于对象的 `PUT` 请求。标头 `Access-Control-Request-Headers` 和 `Access-Control-Expose-Headers` 是可选的。
+ 为响应预检 `OPTIONS` 请求中的 `Access-Control-Request-Method` 标头，如果请求的方法匹配，Amazon S3 会返回受支持方法的列表。
+ 为响应预检 `OPTIONS` 请求中的 `Access-Control-Request-Headers` 标头，如果请求的标头匹配，Amazon S3 会返回受支持标头的列表。
+ 为响应预检 `OPTIONS` 请求中的 `Access-Control-Expose-Headers` 标头，如果请求的标头与浏览器中运行的脚本可以访问的受支持标头匹配，Amazon S3 会返回受支持标头的列表。

**注意**  
发送预检请求时，如果不支持使用任何 CORS 请求标头，则不会返回任何响应 CORS 标头。

为响应此预检 `OPTIONS` 请求，您将收到 `200 OK` 响应。有关测试 CORS 时收到的常见错误代码以及解决 CORS 相关问题的更多信息，请参阅 [CORS 问题排查](https://docs.aws.amazon.com/AmazonS3/latest/userguide/cors-troubleshooting.html)。

```
< HTTP/1.1 200 OK
< Date: Fri, 12 Jul 2024 00:23:51 GMT
< Access-Control-Allow-Origin: http://www.example1.com
< Access-Control-Allow-Methods: GET, PUT, POST, DELETE 
< Access-Control-Allow-Headers: Authorization
< Access-Control-Expose-Headers: x-amz-meta-custom-header
< Access-Control-Allow-Credentials: true
< Vary: Origin, Access-Control-Request-Headers, Access-Control-Request-Method
< Server: AmazonS3
< Content-Length: 0
```