测试 CORS - Amazon Simple Storage Service

测试 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