

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 中的跨來源資源共用 (CORS) Lightsail
<a name="configure-cors"></a>

跨來源資源分享 (CORS) 會定義一種方式，讓載入單一個網域的用戶端 Web 應用程式，能與不同網域中的資源互動。透過 CORS 支援，您可以使用Lightsail物件儲存體建置豐富的用戶端 Web 應用程式，並選擇性地允許跨來源存取您的儲存貯體資源。如需 CORS 的詳細資訊，請參閱[什麼是 CORS？](https://aws.amazon.com/what-is/cross-origin-resource-sharing/)。

本節說明如何使用 AWS Command Line Interface () 為您的Lightsail儲存貯體設定 CORS AWS CLI。若要設定儲存貯體以允許跨來源請求，您可以使用 JSON 文件將 CORS 組態新增至儲存貯體，該文件會定義規則，識別您允許存取儲存貯體的原始伺服器、每個原始伺服器支援的操作 (HTTP 方法），以及其他操作特定資訊。

**Topics**
+ [CORS 使用案例](#cors-use-cases)
+ [如何Lightsail評估 CORS 組態](cors-how-evaluation-works.md)
+ [使用 設定 CORS AWS CLI](cors-configuration-cli.md)
+ [對 CORS 進行故障診斷](cors-troubleshooting.md)

## CORS 使用案例
<a name="cors-use-cases"></a>

下列範例案例詳細說明如何使用儲存Lightsail貯體設定 CORS。

**案例：Web 字型託管**  
假設您想要從儲存Lightsail貯體託管 Web 字型。瀏覽器需要 CORS 檢查 （也稱為預檢檢查） 才能載入 Web 字型。您可以設定託管 Web 字型的儲存貯體，以允許任何原始伺服器提出這些請求。

# 如何Lightsail評估 CORS 組態
<a name="cors-how-evaluation-works"></a>

當Lightsail物件儲存從瀏覽器接收預檢請求時，它會評估儲存貯體的 CORS 組態，並使用第一個符合傳入瀏覽器請求的 CORS 規則來啟用跨來源請求。符合規則必須滿足下列條件：
+ 請求中的 `Origin`標頭必須符合 `AllowedOrigins`元素中的原始伺服器。
+ `Access-Control-Request-Method` 標頭中指定的 HTTP 方法必須符合 `AllowedMethods`元素中的方法。
+ 標頭中列出的`Access-Control-Request-Headers`標頭必須符合 `AllowedHeaders`元素中的標頭。

**注意**  
當您在儲存貯體上啟用 CORS 時，儲存貯體許可會繼續套用。CORS 組態只會判斷瀏覽器是否允許跨來源請求繼續。如需詳細資訊，請參閱[控制對儲存Lightsail貯體和物件的存取](amazon-lightsail-understanding-bucket-permissions.md)。

## CORS 組態的元素
<a name="cors-configuration-elements"></a>

CORS 組態是包含 CORS 規則陣列的 JSON 文件。每個規則都會定義允許哪些原始伺服器存取儲存貯體、允許哪些 HTTP 方法，以及其他組態選項。

下列元素可以包含在 CORS 規則中：

**allowedOrigins**  
指定允許存取儲存貯體的原始伺服器。您可以使用萬用字元 (\$1) 來允許所有原始伺服器，或指定特定網域，例如 `https://example.com`。

**allowedMethods**  
指定指定原始伺服器允許的 HTTP 方法。有效值包括 GET、PUT、POST、DELETE 和 HEAD。

**allowedHeaders**  
透過 Access-Control-Request-Headers 標頭，指定在預檢 OPTIONS 請求中允許的標頭。

**exposeHeaders**  
指定用戶端應用程式可以存取回應中的哪些標頭。

**id**  
CORS 規則的唯一識別符。

**maxAgeSeconds**  
指定瀏覽器可以快取預檢請求回應的時間，以秒為單位。

如需這些參數的詳細資訊，請參閱 *Amazon Lightsail API 參考*中的 [BucketCorsRule](https://docs.aws.amazon.com/lightsail/2016-11-28/api-reference/API_BucketCorsRule.html)。

# 使用 設定 CORS AWS CLI
<a name="cors-configuration-cli"></a>

您可以使用 AWS CLI 搭配 `--cors` 參數來設定儲存Lightsail貯體的 CORS。此參數接受包含 CORS 組態的 JSON 檔案。如需 CORS 組態元素的詳細資訊，請參閱 [CORS 組態的元素](cors-how-evaluation-works.md#cors-configuration-elements)。

**Topics**
+ [套用 CORS 組態](#cors-configuration-apply)
+ [CORS 組態範例](#cors-configuration-examples)
+ [移除 CORS 組態](#cors-remove-configuration)

## 套用 CORS 組態
<a name="cors-configuration-apply"></a>

下列程序顯示如何透過指定 JSON 檔案，將 CORS 組態套用至儲存貯體。如需更多範例組態，請參閱 [CORS 組態範例](#cors-configuration-examples)。

**使用 設定儲存貯體的 CORS AWS CLI**

1. 建立包含 CORS 組態的 JSON 檔案。例如，`cors-config.json`使用下列內容建立名為 的檔案：

   ```
   {
     "CORSRules": [
       {
         "AllowedOrigins": ["https://example.com"],
         "AllowedMethods": ["GET", "PUT", "POST"],
         "AllowedHeaders": ["*"],
         "MaxAgeSeconds": 3000
       }
     ]
   }
   ```

1. 使用 AWS CLI 將 CORS 組態套用至您的儲存貯體：

   ```
   aws lightsail update-bucket --bucket-name amzn-s3-demo-bucket --cors file://cors-config.json
   ```

1. 確認 CORS 組態已成功套用：

   ```
   aws lightsail get-buckets --bucket-name amzn-s3-demo-bucket --include-cors
   ```

**注意**  
將 *amzn-s3-demo-bucket* 取代為您的Lightsail儲存貯體名稱。

## CORS 組態範例
<a name="cors-configuration-examples"></a>

下列範例顯示不同使用案例的常見 CORS 組態。

**範例 1：允許所有原始伺服器和方法**  
此組態允許所有原始伺服器使用任何 HTTP 方法存取您的儲存貯體：

```
{
    "CORSRules": [
      {
        "AllowedOrigins": ["*"],
        "AllowedMethods": ["GET", "PUT", "POST", "DELETE", "HEAD"],
        "AllowedHeaders": ["*"],
        "MaxAgeSeconds": 3000
      }
    ]
  }
```

**範例 2：限制為特定網域**  
此組態僅允許來自 的請求`https://mywebsite.com`：

```
{
    "CORSRules": [
      {
        "AllowedOrigins": ["https://mywebsite.com"],
        "AllowedMethods": ["GET", "PUT"],
        "AllowedHeaders": ["Authorization", "Content-Type"],
        "ExposeHeaders": ["ETag"],
        "MaxAgeSeconds": 3600
      }
    ]
  }
```

**範例 3：不同原始伺服器的多個規則**  
此組態會為不同的原始伺服器定義不同的規則：

```
{
    "CORSRules": [
      {
        "AllowedOrigins": ["https://mywebsite.com"],
        "AllowedMethods": ["GET", "PUT", "POST"],
        "AllowedHeaders": ["*"],
        "MaxAgeSeconds": 3600
      },
      {
        "AllowedOrigins": ["https://cdn.mywebsite.com"],
        "AllowedMethods": ["GET"],
        "AllowedHeaders": ["Authorization"],
        "MaxAgeSeconds": 86400
      }
    ]
  }
```

## 移除 CORS 組態
<a name="cors-remove-configuration"></a>

若要從儲存貯體中移除 CORS 組態，請使用下列 AWS CLI 命令：

```
aws lightsail update-bucket --bucket-name amzn-s3-demo-bucket --cors '{"rules":[]}'
```

**注意**  
將 *amzn-s3-demo-bucket* 取代為您的Lightsail儲存貯體名稱。

移除 CORS 組態後，瀏覽器會封鎖對儲存貯體的跨來源請求。

# 對 CORS 進行故障診斷
<a name="cors-troubleshooting"></a>

如果您遇到 CORS 問題，請檢查下列項目：
+ **驗證 CORS 組態** – 確保您的 CORS 組態格式正確，且包含使用案例的必要規則。
+ **檢查原始伺服器比對** – 請求中的原始伺服器必須與`AllowedOrigins`清單中的項目完全相符。通訊協定 (http/https)、子網域和連接埠必須完全相符。
+ **驗證 HTTP 方法** – 確保您使用的 HTTP 方法已列在相符規則`AllowedMethods`的 中。
+ **檢查瀏覽器開發人員工具** – 使用瀏覽器的開發人員工具來檢查預檢 OPTIONS 請求和回應，以識別任何與 CORS 相關的錯誤。
+ **驗證儲存貯體許可** – 確保您的儲存貯體除了 CORS 之外還設定了適當的許可。CORS 僅控制瀏覽器型跨來源存取，而非儲存貯體層級許可。

如果您在疑難排解時需要從儲存貯體移除 CORS 組態，請參閱 [移除 CORS 組態](cors-configuration-cli.md#cors-remove-configuration)。