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

使用跨源资源共享 (CORS)

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

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

跨源资源共享:使用案例场景

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

方案 1

假设您在名为 website 的 Amazon S3 存储桶中托管网站(如 使用 Amazon S3 托管静态网站 中所述)。您的用户加载了网站端点。

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 配置?

Amazon S3 收到来自浏览器的预检请求后,它将为存储桶评估 CORS 配置,并使用第一个匹配传入浏览器请求的 CORSRule 规则来允许跨源请求。要使规则实现匹配,必须满足以下条件:

  • 请求的 Origin 标头必须匹配 AllowedOrigin 元素。

  • 预检 Access-Control-Request-Method 请求中的请求方法 (例如,GET 或 PUT) 或 OPTIONS 标头必须是某个 AllowedMethod 元素。

  • 在预检请求中,请求的 Access-Control-Request-Headers 标头中列出的每个标头必须匹配 AllowedHeader 元素。

注意

使存储桶允许 CORS 后,ACL 和策略仍适用。

对象 Lambda 接入点如何支持 CORS

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

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