

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

# 設定 Amplify 應用程式的自訂標頭
<a name="custom-headers"></a>

自訂 HTTP 標頭可讓您為每個 HTTP 回應指定標頭。回應標頭可用在偵錯、安全和資訊方面。您可以在 Amplify 主控台中指定標頭，或下載並編輯應用程式`customHttp.yml`的檔案，並將其儲存在專案的根目錄中。如需詳細程序，請參閱[設定自訂標頭](setting-custom-headers.md)。

先前，自訂 HTTP 標頭是透過在 Amplify 主控台中編輯建置規格 (buildspec)，或下載並更新`amplify.yml`檔案，並將其儲存在專案的根目錄中，為應用程式指定。我們強烈建議將以此方式指定的自訂標頭從 buildspec 和 `amplify.yml` 檔案遷移。如需說明，請參閱[從建置規格遷移自訂標頭和 amplify.yml](migrate-custom-headers.md)。

**Topics**
+ [自訂標頭 YAML 參考](custom-header-YAML-format.md)
+ [設定自訂標頭](setting-custom-headers.md)
+ [從建置規格遷移自訂標頭和 amplify.yml](migrate-custom-headers.md)
+ [Monorepo 自訂標頭需求](monorepo-custom-headers.md)

# 自訂標頭 YAML 參考
<a name="custom-header-YAML-format"></a>

使用下列 YAML 格式指定自訂標頭：

```
customHeaders:
  - pattern: '*.json'
    headers:
    - key: 'custom-header-name-1'
      value: 'custom-header-value-1'
    - key: 'custom-header-name-2'
      value: 'custom-header-value-2'
  - pattern: '/path/*'
    headers:
    - key: 'custom-header-name-1'
      value: 'custom-header-value-2'
```

對於單儲存庫，請使用下列 YAML 格式：

```
applications:
  - appRoot: app1
    customHeaders:
    - pattern: '**/*'
      headers:
      - key: 'custom-header-name-1'
        value: 'custom-header-value-1'
  - appRoot: app2
    customHeaders:
    - pattern: '/path/*.json'
      headers:
      - key: 'custom-header-name-2'
        value: 'custom-header-value-2'
```

當您將自訂標頭新增至應用程式時，您將為下列項目指定自己的值：

**pattern**  
自訂標頭會套用至符合模式的所有 URL 檔案路徑。

**標頭**  
定義符合檔案模式的標頭。

**金鑰**  
自訂標頭的名稱。

**value**  
自訂標頭的值。

若要進一步了解 HTTP 標頭，請參閱 Mozilla 的 [HTTP 標頭](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers)清單。

# 設定自訂標頭
<a name="setting-custom-headers"></a>

有兩種方式可以指定 Amplify 應用程式的自訂 HTTP 標頭。您可以在 Amplify 主控台中指定標頭，也可以透過下載和編輯應用程式`customHttp.yml`檔案並將其儲存在專案的根目錄中來指定標頭。

**設定應用程式的自訂標頭，並將其儲存在主控台中**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要為其設定自訂標頭的應用程式。

1. 在導覽窗格中，選擇**託管**，然後選擇**自訂標頭**。

1. 在**自訂標頭**頁面上，選擇**編輯**。

1. 在**編輯自訂標頭**視窗中，使用自訂標頭 [YAML 格式輸入自訂標頭](custom-header-YAML-format.md)的資訊。

   1. 針對 `pattern`，輸入要比對的模式。

   1. 針對 `key`，輸入自訂標頭的名稱。

   1. 針對 `value`，輸入自訂標頭的值。

1. 選擇**儲存**。

1. 重新部署應用程式以套用新的自訂標頭。
   + 對於 CI/CD 應用程式，導覽至要部署的分支，然後選擇**重新部署此版本**。您也可以從 Git 儲存庫執行新的組建。
   + 對於手動部署應用程式，請在 Amplify 主控台中再次部署應用程式。

**設定應用程式的自訂標頭，並將其儲存在儲存庫的根目錄中**

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要為其設定自訂標頭的應用程式。

1. 在導覽窗格中，選擇**託管**，然後選擇**自訂標頭**。

1. 在**自訂標頭**頁面上，選擇**下載 YML**。

1. 在您選擇的程式碼編輯器中開啟下載`customHttp.yml`的檔案，並使用自訂標頭 [YAML 格式輸入自訂標頭](custom-header-YAML-format.md)的資訊。

   1. 針對 `pattern`，輸入要比對的模式。

   1. 針對 `key`，輸入自訂標頭的名稱。

   1. 針對 `value`，輸入自訂標頭的值。

1. 將編輯`customHttp.yml`的檔案儲存在專案的根目錄中。如果您使用的是單儲存庫，請將`customHttp.yml`檔案儲存在儲存庫的根目錄中。

1. 重新部署應用程式以套用新的自訂標頭。
   + 針對 CI/CD 應用程式，請從包含新`customHttp.yml`檔案的 Git 儲存庫執行新組建。
   + 對於手動部署應用程式，請在 Amplify 主控台中再次部署應用程式，並將新`customHttp.yml`檔案包含您上傳的成品。

**注意**  
在`customHttp.yml`檔案中設定並在應用程式的根目錄中部署的自訂標頭會覆寫 Amplify 主控台自訂標頭區段中定義的**自訂標頭**。

## 安全性自訂標頭範例
<a name="example-security-headers"></a>

自訂安全標頭可強制執行 HTTPS、防止 XSS 攻擊，以及保護您的瀏覽器免於點擊劫持。使用下列 YAML 語法，將自訂安全標頭套用至您的應用程式。

```
customHeaders:
  - pattern: '**'
    headers:
      - key: 'Strict-Transport-Security'
        value: 'max-age=31536000; includeSubDomains'
      - key: 'X-Frame-Options'
        value: 'SAMEORIGIN'
      - key: 'X-XSS-Protection'
        value: '1; mode=block'
      - key: 'X-Content-Type-Options'
        value: 'nosniff'
      - key: 'Content-Security-Policy'
        value: "default-src 'self'"
```

## 設定快取控制自訂標頭
<a name="example-cache-headers"></a>

使用 Amplify 託管的應用程式會遵守原始伺服器傳送的`Cache-Control`標頭，除非您使用您定義的自訂標頭來覆寫它們。Amplify 只會為具有`200 OK`狀態碼的成功回應套用快取控制自訂標頭。這可防止錯誤回應被快取，並提供給提出相同請求的其他使用者。

您可以手動調整 `s-maxage` 指令，以進一步控制應用程式的效能和部署可用性。例如，若要增加內容在邊緣保持快取的時間長度，您可以透過將值更新`s-maxage`為超過預設 600 秒 (10 分鐘） 來手動增加存留時間 (TTL)。

若要指定 的自訂值`s-maxage`，請使用下列 YAML 格式。此範例會將相關聯的內容在邊緣快取 3600 秒 （一小時）。

```
customHeaders:
  - pattern: '/img/*'
    headers:
      - key: 'Cache-Control' 
        value: 's-maxage=3600'
```

如需使用 標頭控制應用程式效能的詳細資訊，請參閱 [使用 Cache-Control 標頭來提高應用程式效能](Using-headers-to-control-cache-duration.md)。

# 從建置規格遷移自訂標頭和 amplify.yml
<a name="migrate-custom-headers"></a>

先前，自訂 HTTP 標頭是透過在 Amplify 主控台中編輯建置規格，或下載並更新`amplify.yml`檔案，並將其儲存在專案的根目錄中，為應用程式指定。強烈建議您從建置規格和 `amplify.yml` 檔案遷移自訂標頭。

在 Amplify 主控台的自訂標頭區段中，或透過下載和編輯`customHttp.yml`檔案來指定您的**自訂標頭**。

**遷移 Amplify 主控台中存放的自訂標頭**

1. 登入 AWS 管理主控台 並開啟 [ Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要在其中執行自訂標頭遷移的應用程式。

1. 在導覽窗格中，選擇**託管**、**建置設定**。在**應用程式建置規格**區段中，您可以檢閱應用程式的 buildspec。

1. 選擇**下載**以儲存目前 buildspec 的副本。如果您需要復原任何設定，您可以稍後參考此副本。

1. 下載完成時，請選擇**編輯**。

1. 請記下 檔案中的自訂標頭資訊，因為您稍後會在步驟 9 中使用它。在**編輯**視窗中，從 檔案刪除任何自訂標頭，然後選擇**儲存**。

1. 在導覽窗格中，選擇**託管**、**自訂標頭**。

1. 在**自訂標頭**頁面上，選擇**編輯**。

1. 在**編輯自訂標頭**視窗中，輸入您在步驟 6 中刪除的自訂標頭資訊。

1. 選擇**儲存**。

1. 重新部署您希望套用新自訂標頭的任何分支。

**將自訂標頭從 amplify.yml 遷移至 customHttp.yml**

1. 導覽至目前部署在應用程式根目錄中`amplify.yml`的檔案。

1. 在您選擇的程式碼編輯器`amplify.yml`中開啟 。

1. 請記下 檔案中的自訂標頭資訊，因為您稍後會在步驟 8 中使用它。刪除 檔案中的自訂標頭。儲存並關閉檔案。

1. 登入 AWS 管理主控台 並開啟 [Amplify 主控台](https://console.aws.amazon.com/amplify/)。

1. 選擇要為其設定自訂標頭的應用程式。

1. 在導覽窗格中，選擇**託管**、**自訂標頭**。

1. 在**自訂標頭**頁面上，選擇**下載**。

1. 在您選擇的程式碼編輯器中開啟下載`customHttp.yml`的檔案，並輸入您在步驟 3 `amplify.yml`中刪除的自訂標頭資訊。

1. 將編輯`customHttp.yml`的檔案儲存在專案的根目錄中。如果您使用的是單儲存庫，請將檔案儲存在儲存庫的根目錄中。

1. 重新部署應用程式以套用新的自訂標頭。
   + 針對 CI/CD 應用程式，請從包含新`customHttp.yml`檔案的 Git 儲存庫執行新組建。
   + 對於手動部署應用程式，請在 Amplify 主控台中再次部署應用程式，並包含含有您上傳成品的新`customHttp.yml`檔案。

**注意**  
在 `customHttp.yml` 檔案中設定並在應用程式的根目錄中部署的自訂標頭會覆寫 Amplify 主控台自訂標頭區段中定義的**自訂標頭**。

# Monorepo 自訂標頭需求
<a name="monorepo-custom-headers"></a>

當您在 monorepo 中為應用程式指定自訂標頭時，請注意下列設定要求：
+ 單一儲存庫有特定的 YAML 格式。如需正確的語法，請參閱 [自訂標頭 YAML 參考](custom-header-YAML-format.md)。
+ 您可以使用 Amplify 主控台的自訂標頭區段，在單一儲存庫中指定應用程式的**自訂標頭**。您必須重新部署應用程式，才能套用新的自訂標頭。
+ 除了使用 主控台之外，您也可以在 `customHttp.yml` 檔案的 monorepo 中指定應用程式的自訂標頭。您必須在儲存庫的根目錄中儲存`customHttp.yml`檔案，然後重新部署應用程式以套用新的自訂標頭。`customHttp.yml` 檔案中指定的自訂標頭會覆寫使用 Amplify 主控台的自訂標頭區段指定的任何**自訂標頭**。