我們宣布
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
跨來源資源分享 (CORS)
跨來源資源分享 (CORS) 是現代 Web 瀏覽器的一項安全功能,其可讓 Web 瀏覽器協調能請求外部網站或服務的網域。由於系統會將大多數資源請求傳送至外部網域 (如 Web 服務的端點),當您使用 AWS SDK for JavaScript 開發瀏覽器應用程式時,CORS 是項重要的考量條件。如果 JavaScript 環境會強制執行 CORS 安全性,您就必須使用服務設定 CORS。
CORS 會根據以下要素判斷是否允許在跨來源請求中共享資源:
提出請求的特定網域
提出的 HTTP 請求類型 (GET、PUT、POST、DELETE 等)
CORS 的運作方式
在最簡單的案例中,瀏覽器指令碼會從另一個網域中的伺服器發出資源 GET 請求。依據該伺服器的 CORS 組態而定,如果請求是來自有權提交 GET 請求的網域,則跨來源伺服器會透過傳回請求的資源來予以回應。
若發出請求的網域或 HTTP 請求類型皆未經授權,該請求即會遭拒。然而,CORS 能夠在實際提交請求前進行預檢。此案例中,會發出預檢請求,此請求中會一併傳送 OPTIONS
存取請求操作。如果跨來源伺服器的 CORS 組態將存取權限授予給提出請求的網域,伺服器就會傳回預檢回應,其中列出提出請求的網域能對請求資源所進行的 HTTP 請求類型。
是否需要設定 CORS
您需要提供 CORS 組態 Amazon S3 儲存貯體,才能對其執行操作。某些 JavaScript 環境可能不會強制執行 CORS,所以不需要設定 CORS。例如,若您是從 Amazon S3 儲存貯體託管應用程式,並透過*.s3.amazonaws.com
或其他特定端點,請求將不會存取外部網域。因此,這個組態就不需要 CORS。在這種情況下,CORS 仍可用於 Amazon S3 以外的其他服務。
為 Amazon S3 儲存貯體設定 CORS
您可以將 Amazon S3 儲存貯體設定為使用 Amazon S3 主控台中的 CORS。
-
在 Amazon S3 主控台中,選擇要編輯的儲存貯體。
-
選取Permissions (許可)選項卡,然後罵到跨來源資源分享 (CORS)面板。
-
選擇Edit (編輯),然後在CORS 組態編輯器,然後選擇Save。
CORS 組態是一種 XML 檔案,包含 <CORSRule>
內的一系列規則。一個組態最多可以擁有 100 條規則,而規則是由下列其中一個標籤所定義:
<AllowedOrigin>
會指定允許提出跨網域請求的網域來源。<AllowedMethod>
會指定跨網域請求中允許的請求類型 (GET、PUT、POST、DELETE、HEAD)。<AllowedHeader>
會指定預檢請求中允許使用的標頭。
有關示例配置,請參閲如何在儲存貯體上設定 CORS?中的Amazon Simple Storage Service 用户指南。
CORS 組態範例
以下 CORS 組態範例允許使用者從網域 example.org
檢視、新增、移除或更新儲存貯體內的物件,但仍建議您將 <AllowedOrigin>
範圍限定在網站的網域。若要允許任何來源,則可指定 "*"
。
重要
在新的 S3 主控台中,CORS 組態必須為 JSON 格式。
這個組態並不會授權使用者對儲存貯體執行任何動作,它能讓瀏覽器安全模型允許向 Amazon S3 發送請求。您需要透過儲存貯體許可或 IAM 角色許可來設定許可。
您可以使用ExposeHeader
,讓軟體開發套件能讀取 Amazon S3 返回的響應標頭。舉例而言,如果您想讀取來自 PUT
或分段上傳的 ETag
標頭,就需要在組態中加入 ExposeHeader
標籤,如上述範例所示。軟體開發套件僅能存取透過 CORS 組態公開的標頭。若您在物件上設定中繼資料,則傳回的值即為具有字首 x-amz-meta-
的標頭 (如 x-amz-meta-my-custom-header
);請務必以相同方式公開該標頭。