测试 CORS - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

测试 CORS

要测试 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。有关 CORS 配置的更多示例,请参阅 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

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-HeadersAccess-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 问题排查

< 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