使用跨源资源共享 (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
规则来允许跨源请求。要使规则实现匹配,必须满足以下条件:
-
向存储桶发出的 CORS 请求中的
Origin
标头必须与 CORS 配置的AllowedOrigins
元素中的源相匹配。 -
在向存储桶发出的 CORS 请求的
Access-Control-Request-Method
中指定的 HTTP 方法,必须与在 CORS 配置的AllowedMethods
元素中列出的一个或多个方法相匹配。 -
预检请求的
Access-Control-Request-Headers
标头中列出的标头必须与 CORS 配置的AllowedHeaders
元素中的标头相匹配。
注意
对存储桶启用 CORS 时,ACL 和策略将继续适用。
对象 Lambda 接入点如何支持 CORS
当 S3 对象 Lambda 收到来自浏览器的请求或包含 Origin
标头的请求时,S3 对象 Lambda 始终会添加 “AllowedOrigins":"*"
标头字段。
有关使用 CORS 的更多信息,请参阅以下主题。