測試 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是可選的。

  • 為了回應預檢請求中的Access-Control-Request-Method標頭,如果要OPTIONS求的方法相符,Amazon S3 會傳回允許的方法清單。

  • 為了回應預檢請求中的標Access-Control-Request-Headers頭,如果要OPTIONS求的標頭相符,Amazon S3 會傳回允許的標頭清單。

  • 為了回應預檢請求中的標Access-Control-Expose-Headers頭,如果要OPTIONS求的標頭與瀏覽器中執行的指令碼可存取的允許標頭相符,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