

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

# 使用政策控制原始伺服器請求
<a name="controlling-origin-requests"></a>

當檢視器請求 CloudFront 導致*快取遺漏* (請求的物件未在節點位置快取) 時，CloudFront 會將請求傳送至原始伺服器以擷取物件。這就是所謂的*原始伺服器請求*。原始伺服器請求會永遠包含來自檢視器請求的以下資訊：
+ URL 路徑 (僅路徑，不含 URL 查詢字串或網域名稱)
+ 請求內文 (如果有)
+ CloudFront 自動納入在每個原始伺服器請求 (包括 `Host`、`User-Agent` 和 `X-Amz-Cf-Id`) 中的 HTTP 標頭

依預設，來自檢視器請求的其他資訊，例如 URL 查詢字串、HTTP 標頭和 Cookie，不會包含在原始伺服器請求中。(例外：使用舊版快取設定時，CloudFront 預設會將標頭轉送至您的原始伺服器。) 但是，您可能想要在原始伺服器接收其中一些其他資訊，例如收集資料以供分析或遙測。您可以使用*原始伺服器請求政策*來控制原始伺服器請求中包含的資訊。

原始伺服器請求政策與控制[快取金鑰的快取政策](controlling-the-cache-key.md)分開。如此可讓您在原始伺服器接收其他資訊，並保持良好的*快取命中率* (造成快取命中的檢視器請求比例)。您可以單獨控制原始伺服器請求中包含哪些資訊 (使用原始伺服器請求政策) 以及包含在快取金鑰中 (使用快取政策) 來執行此操作。

雖然這兩種政策彼此獨立，但實際上彼此相關聯。您包含在快取金鑰 (使用快取政策) 中的所有 URL 查詢字串、HTTP 標頭和 Cookie 都會自動包含在原始伺服器請求中。使用原始伺服器請求政策，指定您要包含在原始伺服器請求中，但*不*包含在快取金鑰中的資訊。就像快取原則一樣，您可以將原始伺服器請求原則附加到 CloudFront 分發中的一或多個快取行為。

您也可以使用原始伺服器請求政策，將其他 HTTP 標頭新增至未包含在檢視器請求中的原始伺服器請求。這些額外的標頭是由傳送原始伺服器請求 CloudFront 之前新增的，標頭值會根據檢視器請求自動確定。如需詳細資訊，請參閱[新增 CloudFront 請求標頭](adding-cloudfront-headers.md)。

**Topics**
+ [了解原始伺服器請求政策](origin-request-understand-origin-request-policy.md)
+ [建立原始伺服器請求政策](origin-request-create-origin-request-policy.md)
+ [使用受管原始伺服器請求政策](using-managed-origin-request-policies.md)
+ [新增 CloudFront 請求標頭](adding-cloudfront-headers.md)
+ [了解原始伺服器請求政策和快取政策如何協同運作](understanding-how-origin-request-policies-and-cache-policies-work-together.md)

# 了解原始伺服器請求政策
<a name="origin-request-understand-origin-request-policy"></a>

CloudFront 會針對常見使用案例提供一些預先定義的原始伺服器請求原則 (稱為*受管原則*)。您可以使用這些受管政策，也可以根據您的需求建立自己的原始伺服器請求政策。如需有關受管政策的詳細資訊，請參閱 [使用受管原始伺服器請求政策](using-managed-origin-request-policies.md)。

原始伺服器請求政策包含下列設定，這些設定分類為*政策資訊*和*原始伺服器請求設定*。

## 政策資訊
<a name="origin-request-understand-origin-request-policy-info"></a>

**名稱**  
用來識別原始伺服器請求政策的唯一名稱。在主控台中，您可以使用名稱將原始伺服器請求政策附加到快取行為。

**描述**  
描述原始伺服器請求政策的備註。這是選用的。

## 原始伺服器請求設定
<a name="origin-request-understand-origin-request-policy-settings"></a>

原始伺服器請求設定會指定檢視器請求中的值，這些值包含在 CloudFront 發送給原始伺服器的請求中 (稱為原始伺服器請求)。這些值可以包括 URL 查詢字串、HTTP 標頭和 Cookie。您指定的值會包含在原始伺服器請求中，但不會包含在快取金鑰中。如需控制快取金鑰的資訊，請參閱 [使用政策控制快取金鑰](controlling-the-cache-key.md)。

**標頭**  
在檢視器請求中，CloudFront 會包含在原始伺服器請求中的 HTTP 標頭。針對標頭，您可以選擇下列設定之一：  
+ **無** – 檢視器請求中的 HTTP 標頭*不*包含在原始伺服器請求中。
+ **所有檢視器標頭** – 檢視器請求中的所有 HTTP 標頭都會包含在原始伺服器請求中。
+ **All viewer headers and the following CloudFront headers** (所有檢視器標頭和下列 CloudFront 標頭) – 檢視器請求中的所有 HTTP 標頭都會包含在原始伺服器請求中。此外，您可以指定要新增至原始伺服器請求的 CloudFront 標頭。如需 CloudFront 標頭的詳細資訊，請參閱 [新增 CloudFront 請求標頭](adding-cloudfront-headers.md)。
+ **Include the following headers** (包含下列標頭) – 您可以指定原始伺服器請求中要包含哪些 HTTP 標頭。
**注意**  
請勿指定已包含在 **原始伺服器自訂標頭** 設定中的標頭。如需詳細資訊，請參閱[設定 CloudFront 以將自訂標頭新增到原始伺服器請求](add-origin-custom-headers.md#add-origin-custom-headers-configure)。
+ **所有檢視器標頭，除了** – 您指定***不***包含在原始伺服器請求中的 HTTP 標頭。檢視器要求中的所有其他 HTTP 標頭都會包含在內，但指定的標頭除外。
當您使用 **所有檢視器標頭和下列 CloudFront 標頭**、**包含下列標頭** 或 **所有檢視器標頭，除了……** 設定時，您將僅依標頭名稱指定 HTTP 標頭。在原始伺服器請求中，CloudFront 會包含完整標頭，包括其值。  
當您使用 **所有檢視器標頭，除了……** 設定以移除檢視器的 `Host` 標頭時，CloudFront 會向原始伺服器請求新增一個具有原始伺服器網域名稱的新 `Host` 標頭。

**Cookie**  
在原始伺服器請求中，CloudFront 會包含在原始伺服器請求中的 Cookie。針對 Cookie，您可以選擇下列設定之一：。  
+ **無** – 檢視器請求中的 Cookie *不*包含在原始伺服器請求中。
+ **所有** – 檢視器請求中的所有 Cookie 都會包含在原始伺服器請求中。
+ **包含指定的 Cookie** – 您可以指定在原始伺服器請求中納入哪些檢視器請求的 Cookie。
+ **所有 Cookie，除了** – 在原始伺服器請求中，您指定哪些 Cookie ***不***包含在檢視器請求中。檢視器請求中的所有其他 Cookie 都會包含在內。
在您使用 **包含指定的 Cookie** 或 **所有 Cookie，除了……** 設定時，您只會依名稱指定 Cookie。在原始伺服器請求中，CloudFront 會包含完整的 Cookie，包括其值。

**查詢字串**  
在檢視器請求中，CloudFront 包含在原始伺服器請求中的 URL 查詢字串。對於查詢字串，您可以選擇下列其中一個設定：  
+ **無** – 檢視器請求中的查詢字串*不*包含在原始伺服器請求中。
+ **所有** – 檢視器請求中的查詢字串都包含在原始伺服器請求中。
+ **包含指定的查詢字串** – 您可以指定原始伺服器請求中要納入檢視器請求中的哪些查詢字串。
+ **所有查詢字串，除了** – 在原始伺服器請求中，您指定哪些查詢字符串***不***包含在檢視器請求中。包括所有其他查詢字串。
在您使用 **包含指定的查詢字串** 或 **所有查詢字串，除了……** 設定時，您只會依名稱來指定查詢字串。在原始伺服器請求中，CloudFront 會包含完整的查詢字串 (包括其值)。

# 建立原始伺服器請求政策
<a name="origin-request-create-origin-request-policy"></a>

您可以使用原始伺服器請求原則來控制 CloudFront 傳送至原始伺服器請求中包含的值 (URL 查詢字串、HTTP 標頭和 Cookie)。您可以在 CloudFront 主控台中使用 AWS Command Line Interface (AWS CLI) 或 CloudFront API 建立原始伺服器請求政策。

建立原始伺服器請求原則後，您可以將其附加到 CloudFront 分發中的一或多個快取行為。

不需要原始伺服器請求政策。當快取行為未附加原始伺服器請求政策時，原始伺服器請求會包含[快取政策](cache-key-understand-cache-policy.md)中指定的所有值，但僅此而已。

**注意**  
若要使用原始伺服器請求政策，快取行為也必須使用[快取政策](controlling-the-cache-key.md)。在沒有快取政策的情況下，您無法在快取行為中使用原始伺服器請求政策。

------
#### [ Console ]

**建立原始伺服器請求政策 (主控台)**

1. 登入 AWS 管理主控台 ，並在位於 的 CloudFront 主控台中開啟**政策**頁面[https://console.aws.amazon.com/cloudfront/v4/home?#/policies](https://console.aws.amazon.com/cloudfront/v4/home?#/policies)。

1. 選擇 **Origin request** (原始伺服器請求)，然後選擇 **Create origin request policy** (建立原始伺服器請求政策)。

1. 選擇此原始伺服器請求政策所需的設定。如需詳細資訊，請參閱 [了解原始伺服器請求政策](origin-request-understand-origin-request-policy.md)。

1. 完成時，請選擇 **Create** (建立)。

建立原始伺服器請求政策後，您可以將其附加至快取行為。

**將原始伺服器請求政策附加到現有分佈 (主控台)**

1. 在位於 [https://console.aws.amazon.com/cloudfront/v4/home#/distributions](https://console.aws.amazon.com/cloudfront/v4/home#/distributions) 的 CloudFront 主控台中開啟 **Distributions (分佈)** 頁面。

1. 選擇要更新的分佈，然後選擇**行為**索引標籤。

1. 選擇要更新的快取行為，然後選擇**編輯**。

   或者，若要建立新的快取行為，請選擇 **Create behavior** (建立行為)。

1. 在 **Cache key and origin requests** (快取金鑰和原始伺服器請求) 一節中，請確定已選擇 **Cache policy and origin request policy** (快取政策和原始伺服器請求政策)。

1. 針對 **Origin request policy** (原始伺服器請求政策)，請選擇要連接至此快取行為的原始伺服器請求政策。

1. 請在頁面底部選擇 **Save changes** (儲存變更)。

**將原始伺服器請求政策附加到新分佈 (主控台)**

1. 在 [https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) 中開啟 CloudFront 主控台。

1. 選擇 **Create Distribution** (建立分佈)。

1. 在 **Cache key and origin requests** (快取金鑰和原始伺服器請求) 一節中，請確定已選擇 **Cache policy and origin request policy** (快取政策和原始伺服器請求政策)。

1. 對於 **Origin request policy** (原始伺服器請求政策)，請選擇要連接至此分佈預設快取行為的原始伺服器請求政策。

1. 為原始伺服器、預設快取行為和其他分佈設定選擇所需的設定。如需詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)。

1. 完成後，請選擇 **Create distribution** (建立分佈)。

------
#### [ CLI ]

若要使用 AWS Command Line Interface (AWS CLI) 建立原始伺服器請求政策，請使用 **aws cloudfront create-origin-request-policy**命令。您可以使用輸入檔案來提供命令的輸入參數，而不是將每個個別參數指定為命令列輸入。

**建立原始伺服器請求政策 (包含輸入檔案的 CLI)**

1. 使用下列命令建立一個名為 `origin-request-policy.yaml` 的檔案，其中包含 **create-origin-request-policy** 命令的所有輸入參數。

   ```
   aws cloudfront create-origin-request-policy --generate-cli-skeleton yaml-input > origin-request-policy.yaml
   ```

1. 開啟您剛才建立且命名為 `origin-request-policy.yaml` 的檔案。編輯檔案以指定您想要的原始伺服器請求政策設定，然後儲存檔案。您可以從檔案中移除選用欄位，但不要移除必要欄位。

   如需有關原始伺服器請求原則設定的詳細資訊，請參閱 [了解原始伺服器請求政策](origin-request-understand-origin-request-policy.md)。

1. 使用下列命令，使用 `origin-request-policy.yaml` 檔案中的輸入參數建立原始伺服器請求政策。

   ```
   aws cloudfront create-origin-request-policy --cli-input-yaml file://origin-request-policy.yaml
   ```

   記下命令輸出中的 `Id` 值。這是原始伺服器請求原則 ID，您需要它將原始伺服器請求原則附加到 CloudFront 分佈的快取行為。

**若要將原始伺服器請求政策附加至現有分佈 (包含輸入檔案的 CLI)**

1. 使用下列命令來儲存您想要更新之 CloudFront 分佈的分佈組態。將 *distribution\$1ID* 取代為分佈的 ID。

   ```
   aws cloudfront get-distribution-config --id distribution_ID --output yaml > dist-config.yaml
   ```

1. 開啟您剛才建立且命名為 `dist-config.yaml` 的檔案。編輯檔案，對您要更新的每個快取行為進行下列變更，以使用原始伺服器請求政策。
   + 在快取行為中，新增名為 `OriginRequestPolicyId` 的欄位。對於欄位值，請使用您在建立政策後記下的原始伺服器請求政策 ID。
   + 將 `ETag` 欄位重新命名為 `IfMatch`，但不要變更欄位的值。

   完成後儲存檔案。

1. 使用下列命令來更新分佈，以使用原始伺服器請求政策。將 *distribution\$1ID* 取代為分佈的 ID。

   ```
   aws cloudfront update-distribution --id distribution_ID --cli-input-yaml file://dist-config.yaml
   ```

**若要將原始伺服器請求政策連接至新分佈 (包含輸入檔案的 CLI)**

1. 使用下列命令建立一個命名為 `distribution.yaml` 的檔案，其中包含 **create-distribution** 命令的所有輸入參數。

   ```
   aws cloudfront create-distribution --generate-cli-skeleton yaml-input > distribution.yaml
   ```

1. 開啟您剛才建立且命名為 `distribution.yaml` 的檔案。在預設快取行為的 `OriginRequestPolicyId` 欄位中，輸入您在建立政策後記下的原始伺服器請求政策 ID。繼續編輯檔案以指定所需的分佈設定，然後在完成後儲存檔案。

   如需有關分佈設定的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)。

1. 使用下列命令，使用 `distribution.yaml` 檔案中的輸入參數建立分佈。

   ```
   aws cloudfront create-distribution --cli-input-yaml file://distribution.yaml
   ```

------
#### [ API ]

若要使用 CloudFront API 建立原始伺服器請求原則，請使用 [CreateOriginRequestPolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateOriginRequestPolicy.html)。如需您在此 API 呼叫中指定欄位的詳細資訊，請參閱 [了解原始伺服器請求政策](origin-request-understand-origin-request-policy.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

建立原始伺服器請求政策後，您可以使用下列其中一個 API 呼叫，將其附加至快取行為：
+ 若要將它附加到現有分佈中的快取行為，請使用 [UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)。
+ 若要將它附加到新分佈中的快取行為，請使用 [CreateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateDistribution.html)。

對於這兩個 API 呼叫，請在快取行為中的 `OriginRequestPolicyId` 欄位中提供原始伺服器請求政策的 ID。如需您在這些 API 呼叫中指定之其他欄位的詳細資訊，請參閱 [所有分佈設定參考](distribution-web-values-specify.md)和 AWS SDK 或其他 API 用戶端的 API 參考文件。

------

# 使用受管原始伺服器請求政策
<a name="using-managed-origin-request-policies"></a>

CloudFront 提供一組受管原始伺服器請求原則，您可以將這些原則附加到分佈的任何快取行為上。使用受管原始伺服器請求政策，您不需要編寫或維護自己的原始伺服器請求政策。受管政策會使用針對特定使用案例最佳化的設定。

若要使用受管原始伺服器請求政策，請將其附加到分佈中的快取行為。此程序與您建立原始伺服器請求政策時的程序相同，但您只需附加其中一個受管原始伺服器請求政策，而不是建立新的原始伺服器請求政策。您可以依名稱 (使用主控台) 或 ID (使用 AWS CLI 或軟體開發套件) 附加政策。名稱和 ID 會列在下一節中。

如需詳細資訊，請參閱[建立原始伺服器請求政策](origin-request-create-origin-request-policy.md)。

下列主題說明您可以使用的受管原始伺服器請求政策。

**Topics**
+ [AllViewer](#managed-origin-request-policy-all-viewer)
+ [AllViewerAndCloudFrontHeaders-2022-06](#managed-origin-request-policy-all-viewer-and-cloudfront)
+ [AllViewerExceptHostHeader](#managed-origin-request-policy-all-viewer-except-host-header)
+ [CORS-CustomOrigin](#managed-origin-request-policy-cors-custom)
+ [CORS-S3Origin](#managed-origin-request-policy-cors-s3)
+ [Elemental-MediaTailor-PersonalizedManifests](#managed-origin-request-policy-mediatailor)
+ [HostHeaderOnly](#managed-origin-request-policy-host-header-only)
+ [UserAgentRefererHeaders](#managed-origin-request-policy-user-agent-referer)

## AllViewer
<a name="managed-origin-request-policy-all-viewer"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/216adef6-5c7f-47e4-b989-5492eafa07d3)

此政策包含檢視器請求中的所有值 (標頭、Cookie 和查詢字串)。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`216adef6-5c7f-47e4-b989-5492eafa07d3`

此政策包括以下設定：
+ **原始伺服器請求中包含的標頭：**檢視器請求中的所有標頭
+ **原始伺服器請求中包含的 Cookie：**所有
+ **原始伺服器請求中包含的查詢字串：**全部

## AllViewerAndCloudFrontHeaders-2022-06
<a name="managed-origin-request-policy-all-viewer-and-cloudfront"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/33f36d7e-f396-46d9-90e0-52428a34d9dc)

此政策包含檢視者請求的所有值 (標頭、Cookies 和查詢字串)，以及 2022 年 6 月前發行的所有 [CloudFront 標頭](adding-cloudfront-headers.md) (不包含 2022 年 6 月後發行的 CloudFront 標頭)。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`33f36d7e-f396-46d9-90e0-52428a34d9dc`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**檢視者請求中的所有標頭和下列 CloudFront 標頭：
  + `CloudFront-Forwarded-Proto`
  + `CloudFront-Is-Android-Viewer`
  + `CloudFront-Is-Desktop-Viewer`
  + `CloudFront-Is-IOS-Viewer`
  + `CloudFront-Is-Mobile-Viewer`
  + `CloudFront-Is-SmartTV-Viewer`
  + `CloudFront-Is-Tablet-Viewer`
  + `CloudFront-Viewer-Address`
  + `CloudFront-Viewer-ASN`
  + `CloudFront-Viewer-City`
  + `CloudFront-Viewer-Country`
  + `CloudFront-Viewer-Country-Name`
  + `CloudFront-Viewer-Country-Region`
  + `CloudFront-Viewer-Country-Region-Name`
  + `CloudFront-Viewer-Http-Version`
  + `CloudFront-Viewer-Latitude`
  + `CloudFront-Viewer-Longitude`
  + `CloudFront-Viewer-Metro-Code`
  + `CloudFront-Viewer-Postal-Code`
  + `CloudFront-Viewer-Time-Zone`
  + `CloudFront-Viewer-TLS`
+ **原始伺服器請求中包含的 Cookie：**所有
+ **原始伺服器請求中包含的查詢字串：**全部

## AllViewerExceptHostHeader
<a name="managed-origin-request-policy-all-viewer-except-host-header"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/b689b0a8-53d0-40ab-baf2-68738e2966ac)

此政策**不**包含來自檢視者請求的 `Host` 標頭，但會包含檢視器請求中的所有其他值 (標頭、Cookie 和查詢字串)。

此政策也包含 HTTP 通訊協定、HTTP 版本、TLS 版本，以及所有裝置類型和檢視器位置標頭的其他[ CloudFront 請求標頭](adding-cloudfront-headers.md)。

此政策旨在與 Amazon API Gateway 和 AWS Lambda 函數 URL 原始伺服器搭配使用。這些原始伺服器預期 `Host` 標頭包含原始伺服器網域名稱，而不是 CloudFront 分發的網域名稱。將檢視者請求中的 `Host` 標頭轉寄至這些原始伺服器可能會導致它們無法正常運作。

**注意**  
當您使用此受管原始伺服器請求政策移除檢視器的 `Host` 標頭時，CloudFront 會將包含原始伺服器網域名稱的新 `Host` 標頭新增至原始伺服器請求。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`b689b0a8-53d0-40ab-baf2-68738e2966ac`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**檢視器請求中的所有標頭 (`Host` 標頭***除外***)
+ **原始伺服器請求中包含的 Cookie：**所有
+ **原始伺服器請求中包含的查詢字串：**全部

## CORS-CustomOrigin
<a name="managed-origin-request-policy-cors-custom"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/59781a5b-3903-41f3-afcb-af62929ccde1)

此政策包含在原始伺服器為自訂原始伺服器時，啟用跨原始伺服器資源共用 (CORS) 請求的標頭。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`59781a5b-3903-41f3-afcb-af62929ccde1`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**
  + `Origin`
+ **原始伺服器請求中包含的 Cookie：**無
+ **原始伺服器請求中包含的查詢字串：**無

## CORS-S3Origin
<a name="managed-origin-request-policy-cors-s3"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/88a5eaf4-2fd4-4709-b370-b4c650ea3fcf)

此原則包括當原始伺服器資源 Amazon S3 儲存貯體時，啟用跨原始伺服器資源共用 (CORS) 請求的標頭。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`88a5eaf4-2fd4-4709-b370-b4c650ea3fcf`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**
  + `Origin`
  + `Access-Control-Request-Headers`
  + `Access-Control-Request-Method`
+ **原始伺服器請求中包含的 Cookie：**無
+ **原始伺服器請求中包含的查詢字串：**無

## Elemental-MediaTailor-PersonalizedManifests
<a name="managed-origin-request-policy-mediatailor"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/775133bc-15f2-49f9-abea-afb2e0bf67d2)

此政策專為搭配本身是 AWS Elemental MediaTailor 端點的原始伺服器使用而設計。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`775133bc-15f2-49f9-abea-afb2e0bf67d2`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**
  + `Origin`
  + `Access-Control-Request-Headers`
  + `Access-Control-Request-Method`
  + `User-Agent`
  + `X-Forwarded-For`
+ **原始伺服器請求中包含的 Cookie：**無
+ **原始伺服器請求中包含的查詢字串：**全部

## HostHeaderOnly
<a name="managed-origin-request-policy-host-header-only"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/bf0718e1-ba1e-49d1-88b1-f726733018ae)

此政策僅包含來自原始伺服器的 `Host` 標頭。它不包括任何查詢字串或 Cookie。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`bf0718e1-ba1e-49d1-88b1-f726733018ae`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**Host
+ **原始伺服器請求中包含的 Cookie：**無
+ **原始伺服器請求中包含的查詢字串：**無

## UserAgentRefererHeaders
<a name="managed-origin-request-policy-user-agent-referer"></a>

[在 CloudFront 主控台中檢視此政策](https://console.aws.amazon.com/cloudfront/v4/home#/policies/origin/acba4595-bd28-49b8-b9fe-13317c0390fa)

此政策只包含 `User-Agent` 和 `Referer` 標頭。它不包括任何查詢字串或 Cookie。

使用 CloudFormation AWS CLI、 或 CloudFront API 時，此政策的 ID 為：

`acba4595-bd28-49b8-b9fe-13317c0390fa`

此政策包括下列設定：
+ **原始伺服器請求中包含的標頭：**
  + `User-Agent`
  + `Referer`
+ **原始伺服器請求中包含的 Cookie：**無
+ **原始伺服器請求中包含的查詢字串：**無

# 新增 CloudFront 請求標頭
<a name="adding-cloudfront-headers"></a>

您可以設定 CloudFront，將特定的 HTTP 標頭新增到 CloudFront 從檢視者接收到的請求，並轉送至您的原始伺服器或[邊緣函數](edge-functions.md)。這些 HTTP 標頭的值皆基於檢視者請求的特性。標頭提供有關檢視器的裝置類型、IP 位址、地理位置、請求通訊協定 (HTTP 或 HTTPS)、HTTP 版本、TLS 連線詳細內容以及 [JA3 指紋](https://github.com/salesforce/ja3)與 JA4 指紋。您也可以設定分佈的快取行為來轉送 WebSocket 標頭。如需詳細資訊，請參閱[使用 WebSockets 搭配 CloudFront 分佈](distribution-working-with.websockets.md)。

有了這些標題，您的原始伺服器或邊緣函數即可接收有關檢視器的資訊，而不需要您編寫自己的程式碼來判斷此資訊。如果您的原始伺服器根據這些標頭中的資訊傳回不同的回應，則可以將它們包含在*快取金鑰*中，以便 CloudFront 單獨快取不同的回應。例如，您的原始伺服器可能會根據檢視器所在國家/地區使用特定語言的內容進行回應，或者使用針對特定裝置類型訂製的內容。您的原始伺服器還可能會將這些標頭寫入日誌檔案，您可以使用這些檔案來確定有關檢視器所在位置、檢視器所在的裝置類型等資訊。

如果您想要在快取金鑰中包含標頭，請使用*快取政策*。如需更多詳細資訊，請參閱 [使用政策控制快取金鑰](controlling-the-cache-key.md) 及 [了解快取金鑰](understanding-the-cache-key.md)。

要在原始伺服器中接收這些表頭，但不將它們包含在快取金鑰中，請使用*原始伺服器請求政策*。如需詳細資訊，請參閱[使用政策控制原始伺服器請求](controlling-origin-requests.md)。

**Topics**
+ [裝置類型標頭](#cloudfront-headers-device-type)
+ [檢視器位置標頭](#cloudfront-headers-viewer-location)
+ [用於判斷檢視器標頭結構的標頭](#cloudfront-headers-viewer-headers)
+ [TLS 相關標頭](#tls-related-versions)
+ [其他 CloudFront 標題](#cloudfront-headers-other)

## 裝置類型標頭
<a name="cloudfront-headers-device-type"></a>

可以新增下列標頭來判斷檢視者的裝置類型。根據 `User-Agent` 標頭的值，CloudFront 將這些標頭的值設定為 `true` 或 `false`。如果裝置屬於多個類別，一個以上的值可以是 `true`。例如，針對一些平板電腦裝置，CloudFront 將 `CloudFront-Is-Mobile-Viewer` 與 `CloudFront-Is-Tablet-Viewer` 同時設定為 `true`。
+ `CloudFront-Is-Android-Viewer` - 當 CloudFront 判斷檢視器為具有 Android 作業系統的裝置時，設定為 `true`。
+ `CloudFront-Is-Desktop-Viewer` - 當 CloudFront 判斷檢視器為桌上型裝置時，設定為 `true`。
+ `CloudFront-Is-IOS-Viewer` - 當 CloudFront 判斷檢視器為具有 Apple 行動作業系統的裝置 (例如 iPhone、iPod Touch 以及一些 iPad 裝置) 時，設定為 `true`。
+ `CloudFront-Is-Mobile-Viewer` - 當 CloudFront 判斷檢視器為行動裝置時，設定為 `true`。
+ `CloudFront-Is-SmartTV-Viewer` - 當 CloudFront 判斷檢視器為智慧型電視時，設定為 `true`。
+ `CloudFront-Is-Tablet-Viewer` - 當 CloudFront 判斷檢視器為平板電腦時，設定為 `true`。

## 檢視器位置標頭
<a name="cloudfront-headers-viewer-location"></a>

可以新增下列標頭來判斷檢視者的位置。CloudFront 會根據檢視器的 IP 位址來決定這些標頭的值。對於這些標頭值中的非 ASCII 字元，CloudFront 會根據 [RFC 3986 的 1.2 節](https://tools.ietf.org/html/rfc3986#section-2.1)對字元進行百分比編碼。
+ `CloudFront-Viewer-Address` - 包含檢視者 IP 位址以及請求的來源連接埠，例如標頭值 `198.51.100.10:46532` 表示瀏覽器的 IP 位址是 198.51.100.10，請求來源連接埠是 46532。
+ `CloudFront-Viewer-ASN` - 包含檢視器的自治系統編號 (ASN)。
**注意**  
`CloudFront-Viewer-Address` 和 `CloudFront-Viewer-ASN` 可以在原始伺服器請求政策中新增，而不是在快取政策中新增。
+ `CloudFront-Viewer-Country` – 包含檢視器國家/地區的兩個字母國家/地區代碼。如需國家/地區代碼的清單，請參閱 [ISO 3166-1 alpha-2](https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2)。
+ `CloudFront-Viewer-City` - 包含檢視器所在城市的名稱。

當您新增下列標頭時，CloudFront 會將它們套用至所有請求，*但*源自 AWS 網路的請求除外：
+ `CloudFront-Viewer-Country-Name` – 包含檢視器所在國家/地區的名稱。
+ `CloudFront-Viewer-Country-Region` – 包含代表檢視器區域的代碼 (最多三個字元)。該區域是 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) 代碼的第一層細分 (即最廣泛或最不具體的一層)。
+ `CloudFront-Viewer-Country-Region-Name` – 包含檢視器區域的名稱。該區域是 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) 代碼的第一層細分 (即最廣泛或最不具體的一層)。
+ `CloudFront-Viewer-Latitude` – 包含檢視器的約略緯度。
+ `CloudFront-Viewer-Longitude` – 包含檢視器的約略經度。
+ `CloudFront-Viewer-Metro-Code` – 包含檢視器的地鐵代碼。只有當檢視器在美國時，才會出現此問題。
+ `CloudFront-Viewer-Postal-Code` – 包含檢視器的郵遞區號。
+ `CloudFront-Viewer-Time-Zone` 包含檢視器的時區，採用 [IANA 時區資料庫格式](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones) (例如，`America/Los_Angeles`)。

**注意**  
`CloudFront-Viewer-City`、`CloudFront-Viewer-Metro-Code` 和 `CloudFront-Viewer-Postal-Code` 可能無法用於每個 IP 位址。部分 IP 位址無法以足夠的特異性進行地理位置定位以取得該資訊。

## 用於判斷檢視器標頭結構的標頭
<a name="cloudfront-headers-viewer-headers"></a>

您可以新增下列標頭，協助根據檢視者傳送的標頭來識別檢視者。例如，不同的瀏覽器可能會以特定順序傳送 HTTP 標頭。若 `User-Agent` 標頭中指定的瀏覽器與該瀏覽器的預期標頭順序不同，您可以拒絕該請求。此外，若 `CloudFront-Viewer-Header-Count` 值與 `CloudFront-Viewer-Header-Order` 中的標頭數量不同，您也可以拒絕該請求。
+ `CloudFront-Viewer-Header-Order` – 按要求的順序包含檢視者的標頭名稱，並以冒號分隔。例如：`CloudFront-Viewer-Header-Order: Host:User-Agent:Accept:Accept-Encoding`。超出 7,680 字元限制的標頭會被截斷。
+ `CloudFront-Viewer-Header-Count` – 包含檢視者標頭的總數。

## TLS 相關標頭
<a name="tls-related-versions"></a>

您可以新增下列標頭，以判斷檢視器的 JA3 指紋、JA4 指紋和 TLS 連線詳細資料：
+ `CloudFront-Viewer-JA3-Fingerprint` – 包含檢視者的 [JA3 指紋](https://github.com/salesforce/ja3)。JA3 指紋可協助您判斷請求是來自已知用戶端、惡意軟體或惡意機器人，或預期的 (允許清單中的) 應用程式。
+ `CloudFront-Viewer-JA4-Fingerprint` – 包含檢視器的 JA4 指紋。與 JA3 指紋相似，[JA4 指](https://github.com/FoxIO-LLC/ja4)紋可協助您判斷請求是來自已知用戶端、惡意軟體或惡意機器人，或預期的 (允許清單中的) 應用程式。您可以使用指紋來建置已知良好和不良行為者的資料庫，以便在檢查 HTTP 請求時套用。然後，您可以在應用程式 Web 伺服器或 [Lambda@Edge](lambda-at-the-edge.md) 和 [CloudFront Functions](cloudfront-functions.md) 中檢查標頭值，將標頭值與已知惡意軟體指紋清單進行比較，以封鎖惡意用戶端。
+ `CloudFront-Viewer-TLS` – 包含 SSL/TLS 版本、密碼以及有關用於檢視器和 CloudFront 之間連線的 SSL/TLS 交握的詳細資訊。標頭值的格式如下：

  ```
  SSL/TLS_version:cipher:handshake_information
  ```

  對於 `handshake_information`，標頭可包含下列值：
  + `fullHandshake` – 已針對 SSL/TLS 工作階段進行完整交握。
  + `sessionResumed` – 之前的 SSL/TLS 工作階段已恢復。
  + `connectionReused` – 之前的 SSL/TLS 連線已重複使用。

  下列是此標頭的一些範例值：

  ```
  TLSv1.3:TLS_AES_128_GCM_SHA256:sessionResumed
  ```

  ```
  TLSv1.2:ECDHE-ECDSA-AES128-GCM-SHA256:connectionReused
  ```

  ```
  TLSv1.1:ECDHE-RSA-AES128-SHA256:fullHandshake
  ```

  ```
  TLSv1:ECDHE-RSA-AES256-SHA:fullHandshake
  ```

  有關此標頭值中可能存在的 SSL/TLS 版本和密碼的完整列表，請參閱 [檢視器和 CloudFront 之間支援的通訊協定和密碼](secure-connections-supported-viewer-protocols-ciphers.md)。

**備註**  
JA3 和 JA4 指紋衍生自 SSL/TLS `Client Hello` 封包。它們僅適用於 HTTPS 請求。
對於這些與 TLS 相關的標頭，您可以將它們新增至[原始伺服器請求政策](controlling-origin-requests.md)，而不是在[快取政策](controlling-the-cache-key.md)中。

## 其他 CloudFront 標題
<a name="cloudfront-headers-other"></a>

您可以新增下列標頭，以判斷檢視器的原始請求 URI、原始請求查詢字串參數和值、通訊協定和版本：
+ `CloudFront-Error-Uri` – 包含從檢視器收到的原始請求 URI。
+ `CloudFront-Error-Args` – 包含原始請求查詢字串參數和值。
+ `CloudFront-Forwarded-Proto` – 包含檢視器請求的通訊協定 (HTTP 或 HTTPS)。
+ `CloudFront-Viewer-Http-Version` – 包含檢視器請求的 HTTP 版本。

# 了解原始伺服器請求政策和快取政策如何協同運作
<a name="understanding-how-origin-request-policies-and-cache-policies-work-together"></a>

您可以使用 CloudFront [原始伺服器請求政策](controlling-origin-requests.md)來控制 CloudFront 傳送到原始伺服器的請求，這些請求稱為原始伺服器請求。若要使用原始伺服器請求政策，您必須連接[快取政策](controlling-the-cache-key.md)至相同的快取行為。在沒有快取政策的情況下，您無法在快取行為中使用原始伺服器請求政策。如需更多詳細資訊，請參閱 [使用政策控制原始伺服器請求](controlling-origin-requests.md)。

原始伺服器請求政策和快取政策共同運作，以確定 CloudFront 包含在原始伺服器請求中的值。您包含在快取金鑰 (使用快取政策) 中的所有 URL 查詢字串、HTTP 標頭和 Cookie 都會自動包含在原始伺服器請求中。您在原始伺服器請求政策中指定的任何其他查詢字串、標頭和 Cookie 都會包含在原始伺服器請求中 (但不會包含在快取金鑰中)。

原始請求政策和快取政策具有可能彼此衝突的設定。例如，一個政策可能允許某些值，而另一個政策會封鎖它們。下表說明當您同時使用原始伺服器請求政策和快取政策的設定時，CloudFront 包含在原始伺服器請求中的哪些值。這些設定通常適用於所有類型的值 (查詢字串、標頭和 Cookie)，但您無法在快取政策中指定所有標頭或使用標頭封鎖清單的例外。


|  |  **原始伺服器請求政策**  |  |  **無**  |  **全部**。  |  **允許清單**  |  **封鎖清單**  | 
| --- | --- | --- | --- | --- | --- | --- | 
|  **快取政策**  | 
|  **無**  |  除了每個原始伺服器請求中包含的預設值以外，來源請求中不會包含任何來自檢視器要求的值。如需更多詳細資訊，請參閱 [使用政策控制原始伺服器請求](controlling-origin-requests.md)。  |  來自檢視器請求的所有值都包含在原始伺服器請求中。  |  只有在原始伺服器請求政策中指定的值才會包含在原始伺服器請求中。  |  除了原始伺服器請求政策中指定的值**以外**，所有來自檢視器請求的值都包含在原始伺服器請求中。  | 
|  **全部**。 **注意：**您無法在快取政策中指定所有標頭。  |  來自檢視器要求的所有查詢字串和 Cookie 都包含在原始伺服器請求中。  |  來自檢視器請求的所有值都包含在原始伺服器請求中。  |  來自檢視器要求的所有查詢字串和 Cookie，以及原始伺服器請求政策中指定的任何標頭，都包含在原始伺服器請求中。  |  來自檢視器要求的所有查詢字串和 Cookie 都包含在原始伺服器請求中，且包含在原始伺服器請求政策封鎖清單中指定的字串和 Cookie。快取政策設定會覆寫原始伺服器請求政策封鎖清單。  | 
|  **允許清單**  |  原始伺服器請求中只包含來自檢視器請求的指定值。  |  來自檢視器請求的所有值都包含在原始伺服器請求中。  |  快取政策或原始伺服器請求政策中指定的所有值都包含在原始伺服器請求中。  |  即使原始伺服器請求政策封鎖清單中指定了相同的值，快取政策中指定的值也會包含在原始伺服器請求中。快取政策允許清單會覆寫原始要求政策封鎖清單。  | 
|  **封鎖清單** **注意：**您無法在快取政策封鎖清單中指定標頭。  |  來自檢視器要求的所有查詢字串和 Cookie (指定的字串**除外**) 都包含在原始伺服器請求中。  |  來自檢視器請求的所有值都包含在原始伺服器請求中。  |  即使在快取政策封鎖清單中指定了相同的值，原始伺服器請求政策中指定的值也會包含在原始伺服器請求中。原始伺服器請求政策允許清單會覆寫快取政策封鎖清單。  |  來自檢視器請求的所有值 (快取政策或原始伺服器請求政策中指定的值**除外**) 都會包含在原始伺服器請求中。  | 