

# ポリシーを使用してキャッシュキーを制御する
<a name="controlling-the-cache-key"></a>

CloudFront のキャッシュポリシーを使用して、CloudFront エッジロケーションにキャッシュされるオブジェクトのキャッシュキーに CloudFront が含める HTTP ヘッダー、Cookie、およびクエリ文字列を指定できます。****キャッシュキーは、キャッシュ内のオブジェクトごとの一意の識別子であり、ビューワーの HTTP リクエストがキャッシュヒットになるかどうかを決定します。**

キャッシュヒットが発生するのは、ビューワーリクエストが以前のリクエストと同じキャッシュキーを生成し、そのキャッシュキーのオブジェクトがエッジロケーションのキャッシュにあり、有効な場合です。キャッシュヒットが発生すると、オブジェクトが CloudFront エッジロケーションからビューワーに提供されます。これには以下の利点があります。
+ オリジンサーバーの負荷を軽減
+ ビューワーのレイテンシーを低減

キャッシュキーに含まれる値が少なくなると、キャッシュヒットの可能性が高まります。キャッシュヒット率が高い (キャッシュヒットになるビューワーリクエストの割合が高い) ほど、ウェブサイトやアプリケーションのパフォーマンスが高くなります。**詳細については、「[キャッシュキーを理解する](understanding-the-cache-key.md)」を参照してください。

キャッシュキーを管理するには、CloudFront *キャッシュポリシー*を使用します。キャッシュポリシーは、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。

また、キャッシュポリシーを使用して CloudFront キャッシュ内のオブジェクトの有効期限 (TTL) 設定が指定でき、CloudFront での圧縮オブジェクトのリクエストおよびキャッシュができるようになります。

**注記**  
gRPC トラフィックはキャッシュできないため、キャッシュ設定は gRPC リクエストには影響しません。詳細については、「[CloudFront ディストリビューションでの gRPC の使用](distribution-using-grpc.md)」を参照してください。

**Topics**
+ [キャッシュポリシーを理解する](cache-key-understand-cache-policy.md)
+ [キャッシュポリシーを作成する](cache-key-create-cache-policy.md)
+ [マネージドキャッシュポリシーを使用する](using-managed-cache-policies.md)
+ [キャッシュキーを理解する](understanding-the-cache-key.md)

# キャッシュポリシーを理解する
<a name="cache-key-understand-cache-policy"></a>

キャッシュポリシーを使用して、キャッシュキーに含まれる値 (URL クエリ文字列、HTTP ヘッダー、Cookie) を管理することで、キャッシュヒット率を改善できます。CloudFront には、一般的なユースケース用に*マネージドポリシー*と呼ばれる事前定義されたオリジンリクエストポリシーがいくつか用意されています。これらのマネージドポリシーを使用することも、ユーザーのニーズ別に独自のキャッシュポリシーを作成することもできます。マネージドポリシーの詳細については、「[マネージドキャッシュポリシーを使用する](using-managed-cache-policies.md)」を参照してください。

キャッシュポリシーには以下の設定が含まれます。設定は、*ポリシー情報*、*Time to live (TTL) 設定*、および*キャッシュキー設定*に分類されます。

## ポリシー情報
<a name="cache-key-understand-cache-policy-info"></a>

**名前**  
キャッシュポリシーを特定する名前。コンソールでは、名前を使用して、キャッシュポリシーをキャッシュ動作にアタッチします。

**説明**  
キャッシュポリシーを説明するコメント。これはオプションですが、キャッシュポリシーの目的を特定するのに役立ちます。

## Time to live (TTL) 設定
<a name="cache-key-understand-cache-policy-ttl"></a>

Time to live (TTL) 設定は、`Cache-Control` および `Expires` HTTP ヘッダー (オリジンレスポンス内にある場合) と連動して、CloudFront キャッシュ内のオブジェクトの有効期間を決定します。

**最小 TTL**  
CloudFront がオリジンをチェックしてオブジェクトが更新されているかどうかを確認するまでに、オブジェクトが CloudFront キャッシュに保持される最小期間 (秒単位)。詳細については、「[コンテンツをキャッシュに保持する期間 (有効期限) を管理する](Expiration.md)」を参照してください。  
最小 TTL が 0 より大きい場合は、オリジンヘッダーに `Cache-Control: no-cache`、`no-store`、`private` ディレクティブが含まれていても、CloudFront はキャッシュポリシーの最小 TTL で指定された期間以上コンテンツをキャッシュします。

**最大 TTL**  
CloudFront がオリジンをチェックしてオブジェクトが更新されているかどうかを確認するまでに、オブジェクトが CloudFront キャッシュに保持される最大期間 (秒単位)。CloudFront は、オリジンがオブジェクトと共に `Cache-Control` または `Expires` ヘッダーを送信する場合のみ、この設定を使用します。詳細については、「[コンテンツをキャッシュに保持する期間 (有効期限) を管理する](Expiration.md)」を参照してください。

**デフォルト TTL**  
CloudFront がオリジンをチェックしてオブジェクトが更新されているかどうかを確認するまでに、オブジェクトを CloudFront キャッシュに保持するデフォルトの時間 (秒単位)。CloudFront は、オリジンがオブジェクトと共に `Cache-Control` ヘッダーまたは `Expires` ヘッダーを送信し*ない*場合にのみ、この設定の値をオブジェクトの TTL として使用します。詳細については、「[コンテンツをキャッシュに保持する期間 (有効期限) を管理する](Expiration.md)」を参照してください。

**注記**  
**[最小 TTL]**、**[最大 TTL]**、**[デフォルト TTL]** の設定がすべて 0 に設定されている場合、CloudFront のキャッシュは無効になります。

## キャッシュキー設定
<a name="cache-key-understand-cache-policy-settings"></a>

キャッシュキーの設定では、CloudFront によりキャッシュキーに含まれるビューワーリクエストの値を指定します。値には、URL クエリ文字列、HTTP ヘッダー、および Cookie を含めることができます。キャッシュキーに含める値は、CloudFront がオリジンに送信するリクエスト (*オリジンリクエスト*と呼ばれる) に自動的に含まれます。キャッシュキーに影響を与えずにオリジンリクエストを管理する方法については、「[ポリシーを使用してオリジンリクエストを制御する](controlling-origin-requests.md)」を参照してください。

キャッシュキーには次のような設定があります。
+ [ヘッダー](#cache-policy-headers)
+ [Cookie](#cache-policy-cookies)
+ [クエリ文字列](#cache-policy-query-strings)
+ [圧縮のサポート](#cache-policy-compressed-objects)

**ヘッダー**  
CloudFront によりキャッシュキーおよびオリジンリクエストに含まれる、ビューワーリクエストの HTTP ヘッダー。ヘッダーには、以下のいずれかの設定を選択できます。  
+ [**None (なし)**] - ビューワーリクエストの HTTP ヘッダーはキャッシュキーに*含まれず*、オリジンリクエストに自動的に*含まれません*。
+ [**次のヘッダーを含める**] - ビューワーリクエストのどの HTTP ヘッダーをキャッシュキーに含め、オリジンリクエストに自動的に含めるかを指定します。
[**次のヘッダーを含める**] 設定を使用する場合、HTTP ヘッダーは値ではなく名前で指定します。たとえば、次の HTTP ヘッダーを考えてみます。  

```
Accept-Language: en-US,en;q=0.5
```
この場合、ヘッダーを `Accept-Language` としてではなく、`Accept-Language: en-US,en;q=0.5` として指定します。ただし、CloudFront では、キャッシュキーおよびオリジンリクエストに、その値を含む完全なヘッダーが含まれます。  
CloudFront によって生成された特定のヘッダーをキャッシュキーに含めることもできます。詳細については、「[CloudFront のリクエストヘッダーを追加する](adding-cloudfront-headers.md)」を参照してください。

**Cookie**  
CloudFront によりキャッシュキーおよびオリジンリクエストに含まれる、ビューワーリクエストの Cookie。Cookie には、以下のいずれかの設定を選択できます。  
+ [**None (なし)**] - ビューワーリクエストの Cookie はキャッシュキーに*含まれず*、オリジンリクエストに自動的に*含まれません*。
+ [**All (すべて)**] - ビューワーリクエストのすべての Cookie は、キャッシュキーに含まれ、オリジンリクエストに自動的に含まれます。
+ [**指定した Cookie を含める**] - ビューワーリクエストのどの Cookie をキャッシュキーに含め、オリジンリクエストに自動的に含めるかを指定します。
+ [**次を除くすべての Cookie を含める**] - ビューワーリクエストのどの Cookie をキャッシュキーに*含めず*、オリジンリクエストに自動的に*含めない*かを指定します。指定した Cookie 以外の他のすべての Cookie は、キャッシュキーに*含まれ*、自動的にオリジンリクエストに含まれます。
[**指定した Cookie を含める**] または [**次を除くすべての Cookie を含める**] 設定を使用する場合、Cookie は値ではなく名前で指定します。たとえば、次の `Cookie` ヘッダーを考えてみます。  

```
Cookie: session_ID=abcd1234
```
この場合、Cookie を `session_ID` としてではなく、`session_ID=abcd1234` として指定します。ただし、CloudFront では、キャッシュキーおよびオリジンリクエストに、その値を含む完全な Cookie が含まれます。

**クエリ文字列**  
CloudFront によりキャッシュキーおよびオリジンリクエストに含まれる、ビューワーリクエストの URL クエリ文字列。クエリ文字列には、以下のいずれかの設定を選択できます。  
+ [**None (なし)**] - ビューワーリクエストのクエリ文字列はキャッシュキーに*含まれず*、オリジンリクエストに自動的に*含まれません*。
+ [**All (すべて)**] - ビューワーリクエストのすべてのクエリ文字列は、キャッシュキーに含まれ、オリジンリクエストにも自動的に含まれます。
+ [**指定したクエリ文字列を含める**] - ビューワーリクエストのどのクエリ文字列をキャッシュキーに含め、オリジンリクエストに自動的に含めるかを指定します。
+ [**次を除くすべてのクエリ文字列を含める**] - ビューワーリクエストのどのクエリ文字列をキャッシュキーに*含めず*、オリジンリクエストに自動的に*含めない*かを指定します。指定したクエリ文字列以外の他のすべてのクエリ文字列は、キャッシュキーに*含まれ*、自動的にオリジンリクエストに含まれます。
[**指定したクエリ文字列を含める**] または [**次を除くすべてのクエリ文字列を含める**] 設定を使用する場合、クエリ文字列は値ではなく名前で指定します。たとえば、次の URL パスを考えてみます。  

```
/content/stories/example-story.html?split-pages=false
```
この場合、クエリ文字列を `split-pages` としてではなく、`split-pages=false` として指定します。ただし、CloudFront では、キャッシュキーおよびオリジンリクエストに、その値を含む完全なクエリ文字列が含まれます。  
キャッシュキー設定の場合、CloudFront はヘッダー、クエリ文字列、Cookie のアスタリスク文字 (`*`) をワイルドカードとしてではなくリテラル文字列として扱います。

**圧縮のサポート**  
これらの設定により、Gzip または Brotli 圧縮形式で圧縮されたオブジェクトを CloudFront がリクエストおよびキャッシュできるようになります (ビューワーでサポートされている場合)。これらの設定により、[CloudFront 圧縮](ServingCompressedFiles.md)も有効になります。ビューワーは `Accept-Encoding` HTTP ヘッダーを使用して、これらの圧縮形式のサポートの可否を示します。  
ウェブブラウザ Chrome および Firefox では、HTTPS を使用してリクエストを送信する場合のみ、Brotli 圧縮がサポートされます。これらのブラウザでは、HTTP リクエストで Brotli がサポートされません。
次のいずれかに該当する場合は、これらの設定を有効にします。  
+ ビューワーによってサポートされている場合にオリジンが Gzip 圧縮オブジェクトを返す (リクエストには、HTTPヘッダー `Accept-Encoding` と値 `gzip` が含まれます)。この場合、**Gzip が有効化された**設定を使用します (CloudFront API、AWS SDK、AWS CLI、または CloudFormation で `EnableAcceptEncodingGzip` を `true` に設定します)。
+ ビューワーによってサポートされている場合にオリジンが Brotli 圧縮オブジェクトを返す (リクエストには、HTTPヘッダー `Accept-Encoding` と値 `br` が含まれます)。この場合、**Brotli が有効化された**設定を使用します (CloudFront API、AWS SDK、AWS CLI、または CloudFormation で `EnableAcceptEncodingBrotli` を `true` に設定します)。
+ このキャッシュポリシーが適用されるキャッシュ動作は、[CloudFront 圧縮](ServingCompressedFiles.md)によって設定されます。この場合、Gzip または Brotli のいずれか、またはその両方に対してキャッシュを有効にできます。CloudFront 圧縮が有効になっている場合、両方の形式でキャッシュを有効にすると、インターネットへのデータ転送のコストを軽減できます。
これらの圧縮形式の一方または両方でキャッシュを有効にする場合は、同じキャッシュ動作に関連付けられている[オリジンリクエストポリシー](controlling-origin-requests.md)に `Accept-Encoding` ヘッダーを含めないでください。CloudFront は、これらの形式のいずれかでキャッシュが有効になっている場合、常にこのヘッダーをオリジンリクエストに含めます。そのため、オリジンリクエストポリシーに `Accept-Encoding` を含めても効果はありません。
オリジンサーバーが Gzip または Brotli で圧縮されたオブジェクトを返さない場合、またはキャッシュ動作が CloudFront 圧縮で設定されていない場合は、圧縮オブジェクトのキャッシュを有効にしないでください。有効にすると、[キャッシュヒット率](cache-hit-ratio.md)が低下する可能性があります。  
以下に、これらの設定が CloudFront ディストリビューションに与える影響について説明します。次のシナリオはすべて、ビューワーリクエストに `Accept-Encoding` ヘッダーが含まれていることを前提としています。ビューワーリクエストに `Accept-Encoding` ヘッダーが含まれていない場合、CloudFront はこのヘッダーをキャッシュキーに含めず、対応するオリジンリクエストにも含めません。    
**圧縮されたオブジェクトのキャッシュが両方の圧縮形式に対応している場合**  
ビューワーが Gzip と Brotli の両方をサポートしている場合、つまり、ビューワーリクエストの `gzip` ヘッダーに `br` 値と `Accept-Encoding` 値の両方が含まれている場合、CloudFront では以下の処理が行われます。  
+ ヘッダーを `Accept-Encoding: br,gzip` の形式に正規化し、正規化されたヘッダーをキャッシュキーに含めます。キャッシュキーには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。
+ エッジロケーションのキャッシュに、リクエストに一致し有効期限が切れていない Brotli または Gzip 圧縮オブジェクトがある場合、エッジロケーションはそのオブジェクトをビューワーに返します。
+ エッジロケーションのキャッシュに、リクエストと一致し、有効期限が切れていない Brotli または Gzip 圧縮オブジェクトがない場合、CloudFront は対応するオリジンリクエストに正規化されたヘッダー (`Accept-Encoding: br,gzip`) を含めます。オリジンリクエストには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。
例えば、ビューワーが一方の圧縮形式をサポートし、他方の圧縮形式をサポートしていない場合、ビューワーリクエストの `gzip` ヘッダーに値 `Accept-Encoding` が指定され、`br` が指定されていない場合、CloudFront によって以下の処理が行われます。  
+ ヘッダーを `Accept-Encoding: gzip` の形式に正規化し、正規化されたヘッダーをキャッシュキーに含めます。キャッシュキーには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。
+ エッジロケーションのキャッシュに、リクエストに一致し有効期限が切れていない Gzip 圧縮オブジェクトがある場合、エッジロケーションはそのオブジェクトをビューワーに返します。
+ エッジロケーションのキャッシュに、リクエストと一致し、有効期限が切れていない Gzip 圧縮オブジェクトがない場合、CloudFront は対応するオリジンリクエストに正規化されたヘッダー (`Accept-Encoding: gzip`) を含めます。オリジンリクエストには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。
ビューワーが Brotli をサポートし Gzip をサポートしていない場合の CloudFront の動作を理解するには、前の例で圧縮形式を他方に置き換えてください。  
ビューワーが Brotli または Gzip をサポートしていない場合、つまりビューワーリクエストの `Accept-Encoding` ヘッダーに `br` または `gzip` の値が含まれていない場合、CloudFront の動作は以下のようになります。  
+ キャッシュキーに `Accept-Encoding` ヘッダーを含めません。
+ 対応するオリジンリクエストに `Accept-Encoding: identity` を含めます。オリジンリクエストには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。  
**圧縮されたオブジェクトのキャッシュが 1 つの圧縮形式に対して有効で、もう 1 つの圧縮形式に対して有効でない場合**  
キャッシュが対応している形式をビューワーがサポートしている場合、例えば、圧縮されたオブジェクトのキャッシュが Gzip に対応していて、ビューワーが Gzip をサポートしている (ビューワーリクエストの `gzip` ヘッダー内の値の 1 つが `Accept-Encoding` である) 場合、CloudFront によって以下の処理が行われます。  
+ ヘッダーを `Accept-Encoding: gzip` の形式に正規化し、正規化されたヘッダーをキャッシュキーに含めます。
+ エッジロケーションのキャッシュに、リクエストに一致し有効期限が切れていない Gzip 圧縮オブジェクトがある場合、エッジロケーションはそのオブジェクトをビューワーに返します。
+ エッジロケーションのキャッシュに、リクエストと一致し、有効期限が切れていない Gzip 圧縮オブジェクトがない場合、CloudFront は対応するオリジンリクエストに正規化されたヘッダー (`Accept-Encoding: gzip`) を含めます。オリジンリクエストには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。
この動作は、ビューワーが Gzip と Brotli の両方をサポートしている場合と同じです (ビューワーリクエストの `Accept-Encoding` ヘッダーには `gzip` *と* `br` の両方の値が含まれます)。このシナリオでは、圧縮オブジェクトのキャッシュが Brotli に対応していないためです。  
圧縮オブジェクトのキャッシュが Brotli に対応し Gzip に対応していない場合の CloudFront の動作を理解するには、前の例で圧縮形式を他方に置き換えてください。  
キャッシュが対応している圧縮形式をビューワーがサポートしていない (ビューワーリクエストの `Accept-Encoding` ヘッダーに、その形式の値が含まれていない) 場合、CloudFront の動作は以下のようになります。  
+ キャッシュキーに `Accept-Encoding` ヘッダーを含めません。
+ 対応するオリジンリクエストに `Accept-Encoding: identity` を含めます。オリジンリクエストには、ビューワーから送信された `Accept-Encoding` ヘッダーに存在していた他の値は含まれません。  
**圧縮されたオブジェクトのキャッシュが両方の圧縮形式に対応していない場合**  
圧縮オブジェクトのキャッシュが両方の圧縮形式に対応していない場合、CloudFront は、`Accept-Encoding` ヘッダーをビューワーリクエストの他の HTTP ヘッダーと同じように扱います。デフォルトでは、キャッシュキーには含まれず、オリジンリクエストにも含まれません。他の HTTP ヘッダーと同一のキャッシュポリシーまたはオリジンリクエストポリシーのヘッダーリストに含めることができます。

# キャッシュポリシーを作成する
<a name="cache-key-create-cache-policy"></a>

キャッシュポリシーを使用して、キャッシュキーに含まれる値 (URL クエリ文字列、HTTP ヘッダー、Cookie) を管理することで、キャッシュヒット率を改善できます。キャッシュポリシーは、CloudFront コンソール、AWS Command Line Interface (AWS CLI)、または CloudFront API を使用して作成できます。

キャッシュポリシーを作成したら、CloudFront ディストリビューションの 1 つ以上のキャッシュ動作にアタッチします。

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

**キャッシュポリシーを作成するには (コンソール)**

1. AWS マネジメントコンソール にログインし、[https://console.aws.amazon.com/cloudfront/v4/home?#/policies](https://console.aws.amazon.com/cloudfront/v4/home?#/policies) で CloudFront コンソールの [**‬Policies‭**] (ポリシー) ページを開きます。

1. [**キャッシュポリシーの作成**] を選択します。

1. このキャッシュポリシーに目的の設定を選択します。詳細については、「[キャッシュポリシーを理解する](cache-key-understand-cache-policy.md)」を参照してください。

1. 終了したら、[**作成**] を選択します。

キャッシュポリシーを作成したら、それをキャッシュ動作にアタッチできます。

**既存のディストリビューションにキャッシュポリシーをアタッチするには (コンソール)**

1. [https://console.aws.amazon.com/cloudfront/v4/home#/distributions](https://console.aws.amazon.com/cloudfront/v4/home#/distributions) で CloudFront コンソールの [**Distributions**] (ディストリビューション) ページを開きます。

1. 更新するディストリビューションを選択し、[**動作**] タブを選択します。

1. 更新するキャッシュ動作を選択し、[**編集**] を選択します。

   または、新しいキャッシュ動作を作成するには、[**動作を作成**] を選択します。

1. [**キャッシュキーとオリジンリクエスト**] セクションで、[**キャッシュポリシーとオリジンリクエストポリシー**] が選択されていることを確認します。

1. [**キャッシュポリシー**] では、このキャッシュ動作にアタッチするキャッシュポリシーを選択します。

1. ページの最下部で [**変更の保存**] を選択します。

**新しいディストリビューションにキャッシュポリシーをアタッチするには (コンソール)**

1.  で CloudFront コンソールを開きます[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home)

1. [**ディストリビューションの作成**] を選択します。

1. [**キャッシュキーとオリジンリクエスト**] セクションで、[**キャッシュポリシーとオリジンリクエストポリシー**] が選択されていることを確認します。

1. **[Cache policy]** (キャッシュポリシー) で、このディストリビューションのデフォルトのキャッシュ動作にアタッチするキャッシュポリシーを選択します。

1. オリジン、デフォルトのキャッシュ動作、その他のディストリビューション設定に必要な設定を選択します。詳細については、「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」を参照してください。

1. 終了したら、[**ディストリビューションの作成**] を選択します。

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

AWS Command Line Interface (AWS CLI) でキャッシュポリシーを作成するには、**aws cloudfront create-cache-policy** コマンドを使用します。コマンドの入力パラメータは、コマンドライン入力として個別に指定せずに、入力ファイルを使用して指定できます。

**キャッシュポリシーを作成するには (入力ファイルを含む CLI)**

1. 次のコマンドを使用して、`cache-policy.yaml` コマンドのすべての入力パラメータを含む **create-cache-policy** という名前のファイルを作成します。

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

1. 先ほど作成した `cache-policy.yaml` という名前のファイルを開きます。ファイルを編集して、必要なキャッシュポリシー設定を指定し、ファイルを保存します。ファイルからオプションのフィールドを削除することはできますが、必須フィールドは削除しないでください。

   キャッシュポリシー設定の詳細については、「[キャッシュポリシーを理解する](cache-key-understand-cache-policy.md)」を参照してください。

1. 次のコマンドを使用して、`cache-policy.yaml` ファイルの入力パラメータを使用し、キャッシュポリシーを作成します。

   ```
   aws cloudfront create-cache-policy --cli-input-yaml file://cache-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` という名前のファイルを開きます。ファイルを編集し、キャッシュポリシーを使用するように更新する各キャッシュ動作に次の変更を加えます。
   + キャッシュ動作で、`CachePolicyId` という名前のフィールドを追加します。フィールドの値には、ポリシーの作成後に書き留めたキャッシュポリシー ID を使用します。
   + キャッシュ動作から `MinTTL`、`MaxTTL`、`DefaultTTL`、および `ForwardedValues` フィールドを削除します。これらの設定はキャッシュポリシー内に指定するため、これらのフィールドとキャッシュポリシーを同じキャッシュ動作に含めることはできません。
   + `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` という名前のファイルを開きます。デフォルトのキャッシュ動作の [`CachePolicyId`] フィールドに、ポリシーの作成後に書き留めたキャッシュポリシー ID を入力します。ファイルの編集を続行して必要なディストリビューション設定を指定し、完了したらファイルを保存します。

   ディストリビューション設定の詳細については、「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」を参照してください。

1. 次のコマンドを使用して、`distribution.yaml` ファイルの入力パラメータを使用し、ディストリビューションを作成します。

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

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

CloudFront API を使用してキャッシュポリシーを作成するには、[CreateCachePolicy](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateCachePolicy.html) を使用します。この API コールで指定するフィールドの詳細については、「[キャッシュポリシーを理解する](cache-key-understand-cache-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 コールの両方について、キャッシュ動作内で、`CachePolicyId` フィールドにキャッシュポリシーの ID を指定します。これらの API コールで指定するその他フィールドの詳細については、「[すべてのディストリビューション設定リファレンス](distribution-web-values-specify.md)」と、AWS SDK またはその他 API クライアントの API リファレンスドキュメントを参照してください。

------

# マネージドキャッシュポリシーを使用する
<a name="using-managed-cache-policies"></a>

CloudFront には、ディストリビューションのキャッシュ動作にアタッチできる一連のマネージドキャッシュポリシーが用意されています。マネージドキャッシュポリシーを使用すると、独自のキャッシュポリシーを記述したり、維持したりする必要はありません。マネージドポリシーでは、特定のユースケースに最適化された設定を使用します。

マネージドキャッシュポリシーを使用するには、ディストリビューションのキャッシュ動作にそのポリシーをアタッチします。このプロセスは、キャッシュポリシーを作成するときと同じですが、新しいキャッシュポリシーを作成するのではなく、マネージドキャッシュポリシーの 1 つをアタッチするだけです。ポリシーをアタッチするには、名前 (コンソールの場合) または ID (AWS CLI または SDK の場合) を使用します。名前と ID は、次のセクションに記載されています。

詳細については、「[キャッシュポリシーを作成する](cache-key-create-cache-policy.md)」を参照してください。

次のトピックでは、使用可能なマネージドキャッシュポリシーについて説明します。

**Topics**
+ [Amplify](#managed-cache-policy-amplify)
+ [CachingDisabled](#managed-cache-policy-caching-disabled)
+ [CachingOptimized](#managed-cache-caching-optimized)
+ [CachingOptimizedForUncompressedObjects](#managed-cache-caching-optimized-uncompressed)
+ [Elemental-MediaPackage](#managed-cache-policy-mediapackage)
+ [UseOriginCacheControlHeaders](#managed-cache-policy-origin-cache-headers)
+ [UseOriginCacheControlHeaders-QueryStrings](#managed-cache-policy-origin-cache-headers-query-strings)

## Amplify
<a name="managed-cache-policy-amplify"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/2e54312d-136d-493c-8eb9-b001f22f67d2)

このポリシーは、[AWS Amplify](https://aws.amazon.com/amplify/) ウェブアプリケーションであるオリジンで使用するように設計されています。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`2e54312d-136d-493c-8eb9-b001f22f67d2`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 2 秒
+ **最大 TTL:** 600 秒 (10 分)
+ **デフォルト TTL:** 2 秒
+ **キャッシュキーに含まれるヘッダー:**
  + `Authorization`
  + `CloudFront-Viewer-Country`
  + `Host`

  圧縮オブジェクトのキャッシュの設定が有効になっているため、正規化された `Accept-Encoding` ヘッダーも含まれます。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。
+ **キャッシュキーに含まれる Cookie:** すべての Cookie が含まれます。
+ **キャッシュキーに含まれるクエリ文字列:** すべてのクエリ文字列が含まれます。
+ **圧縮オブジェクトのキャッシュの設定:** 有効。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。

**警告**  
このポリシーの最小 TTL は 0 より大きいため、オリジンヘッダーに `Cache-Control: no-cache`、`no-store` または `private` ディレクティブが存在する場合でも、CloudFront はキャッシュポリシーの最小 TTL で指定された期間以上コンテンツをキャッシュします。

### AWS Amplify キャッシュポリシーのホスティング
<a name="additional-amplify-policies"></a>

Amplify は、以下のマネージドキャッシュポリシーを使用して、お客様のアプリケーションのデフォルトのキャッシュ設定を最適化します。
+ [Amplify-Default](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/4d1d2f1d-3a71-49ad-9e08-7ea5d843a556)
+ [Amplify-DefaultNoCookies](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/a6bad946-36c3-4c33-aa98-362c74a7fb13)
+ [Amplify-ImageOptimization](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/1c6db51a-a33f-469a-8245-dae26771f530)
+ [Amplify-StaticContent](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/7e5fad67-ee98-4ad0-b05a-394999eefc1a)

**注記**  
上記のポリシーは Amplify でのみ使用されます。これらのポリシーをディストリビューションに使用することはお勧めしません。

Amplify ホストアプリケーションのキャッシュ設定管理の詳細については、「Amplify ホスティングユーザーガイド」の「[キャッシュ設定の管理](https://docs.aws.amazon.com/amplify/latest/userguide/caching.html)」を参照してください。 **

## CachingDisabled
<a name="managed-cache-policy-caching-disabled"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/4135ea2d-6df8-44a3-9df3-4b5a84be39ad)

このポリシーは、キャッシュを無効にします。このポリシーは、動的コンテンツとキャッシュできないリクエストに役立ちます。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`4135ea2d-6df8-44a3-9df3-4b5a84be39ad`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 0 秒
+ **最大 TTL:** 0 秒
+ **デフォルト TTL:** 0 秒
+ **キャッシュキーに含まれるヘッダー:** なし
+ **キャッシュキーに含まれる Cookie:** なし
+ **キャッシュキーに含まれるクエリ文字列:** なし
+ **圧縮オブジェクトのキャッシュの設定:** 無効

## CachingOptimized
<a name="managed-cache-caching-optimized"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/658327ea-f89d-4fab-a63d-7e88639e58f6)

このポリシーは、CloudFront がキャッシュキーに含める値を最小限に抑えることで、キャッシュ効率を最適化するよう設計されています。CloudFront は、キャッシュキーにクエリ文字列や Cookie を含めず、正規化された `Accept-Encoding` ヘッダーのみを含めます。これにより CloudFront は、オリジンがオブジェクトを返すときまたは [CloudFront エッジ圧縮](ServingCompressedFiles.md)が有効になっているときに、Gzip 圧縮形式と Brotli 圧縮形式でオブジェクトを個別にキャッシュできます。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`658327ea-f89d-4fab-a63d-7e88639e58f6`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 1 秒。
+ **最大 TTL:** 31,536,000 秒 (365 日)。
+ **デフォルト TTL:** 86,400 秒 (24 時間)。
+ **キャッシュキーに含まれるヘッダー:** 明示的に含まれているものがありません。圧縮オブジェクトのキャッシュの設定が有効になっているため、正規化された `Accept-Encoding` ヘッダーが含まれます。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。
+ **キャッシュキーに含まれる Cookie:** なし。
+ **キャッシュキーに含まれるクエリ文字列:** なし。
+ **圧縮オブジェクトのキャッシュの設定:** 有効。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。

**警告**  
このポリシーの最小 TTL は 0 より大きいため、オリジンヘッダーに `Cache-Control: no-cache`、`no-store` または `private` ディレクティブが存在する場合でも、CloudFront はキャッシュポリシーの最小 TTL で指定された期間以上コンテンツをキャッシュします。

## CachingOptimizedForUncompressedObjects
<a name="managed-cache-caching-optimized-uncompressed"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/b2884449-e4de-46a7-ac36-70bc7f1ddd6d)

このポリシーは、キャッシュキーに含まれる値を最小限に抑えることで、キャッシュ効率を最適化するよう設計されています。クエリ文字列、ヘッダー、または Cookie は含まれません。このポリシーは、前のポリシーと同じですが、圧縮オブジェクトのキャッシュの設定が無効になります。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`b2884449-e4de-46a7-ac36-70bc7f1ddd6d`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 1 秒
+ **最大 TTL:** 31,536,000 秒 (365 日)
+ **デフォルト TTL:** 86,400 秒 (24 時間)
+ **キャッシュキーに含まれるヘッダー:** なし
+ **キャッシュキーに含まれる Cookie:** なし
+ **キャッシュキーに含まれるクエリ文字列:** なし
+ **圧縮オブジェクトのキャッシュの設定:** 無効

**警告**  
このポリシーの最小 TTL は 0 より大きいため、オリジンヘッダーに `Cache-Control: no-cache`、`no-store` または `private` ディレクティブが存在する場合でも、CloudFront はキャッシュポリシーの最小 TTL で指定された期間以上コンテンツをキャッシュします。

## Elemental-MediaPackage
<a name="managed-cache-policy-mediapackage"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/08627262-05a9-4f76-9ded-b50ca2e3a84f)

このポリシーは、オリジンとしての AWS Elemental MediaPackage 用に設計されています。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`08627262-05a9-4f76-9ded-b50ca2e3a84f`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 0 秒
+ **最大 TTL:** 31,536,000 秒 (365 日)
+ **デフォルト TTL:** 86,400 秒 (24 時間)
+ **キャッシュキーに含まれるヘッダー:**
  + `Origin`

  圧縮オブジェクトのキャッシュの設定が Gzip に対して有効になっているため、正規化された `Accept-Encoding` ヘッダーも含まれます。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。
+ **キャッシュキーに含まれる Cookie:** なし
+ **キャッシュキーに含まれるクエリ文字列:**
  + `aws.manifestfilter`
  + `start`
  + `end`
  + `m`
+ **圧縮オブジェクトのキャッシュの設定:** Gzip に対して有効にする。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。

## UseOriginCacheControlHeaders
<a name="managed-cache-policy-origin-cache-headers"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/83da9c7e-98b4-4e11-a168-04f0df8e2c65)

このポリシーは、`Cache-Control` HTTP レスポンスヘッダーを返し、クエリ文字列内の値に応じて異なるコンテンツを提供しないオリジン用に設計されています。クエリ文字列内の値に応じて異なるコンテンツを提供するオリジンの場合は、[UseOriginCacheControlHeaders-QueryStrings](#managed-cache-policy-origin-cache-headers-query-strings) の使用を検討してください。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`83da9c7e-98b4-4e11-a168-04f0df8e2c65`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 0 秒
+ **最大 TTL:** 31,536,000 秒 (365 日)
+ **デフォルト TTL:** 0 秒
+ **キャッシュキーに含まれるヘッダー:**
  + `Host`
  + `Origin`
  + `X-HTTP-Method-Override`
  + `X-HTTP-Method`
  + `X-Method-Override`

  圧縮オブジェクトのキャッシュの設定が有効になっているため、正規化された `Accept-Encoding` ヘッダーも含まれます。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。
+ **キャッシュキーに含まれる Cookie:** すべての Cookie が含まれます。
+ **キャッシュキーに含まれるクエリ文字列:** なし。
+ **圧縮オブジェクトのキャッシュの設定:** 有効。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。

## UseOriginCacheControlHeaders-QueryStrings
<a name="managed-cache-policy-origin-cache-headers-query-strings"></a>

[このポリシーを CloudFront コンソールで見る](https://console.aws.amazon.com/cloudfront/v4/home#/policies/cache/4cc15a8a-d715-48a4-82b8-cc0b614638fe)

このポリシーは、`Cache-Control` HTTP レスポンスヘッダーを返し、クエリ文字列内の値に応じて異なるコンテンツを提供するオリジン用に設計されています。クエリ文字列内の値に応じて異なるコンテンツを提供しないオリジンの場合は、[UseOriginCacheControlHeaders](#managed-cache-policy-origin-cache-headers) の使用を検討してください。

CloudFormation、AWS CLI、または CloudFront API を使用する場合、このポリシーの ID は次のとおりです。

`4cc15a8a-d715-48a4-82b8-cc0b614638fe`

このポリシーの設定は以下のとおりです。
+ **最小 TTL:** 0 秒
+ **最大 TTL:** 31,536,000 秒 (365 日)
+ **デフォルト TTL:** 0 秒
+ **キャッシュキーに含まれるヘッダー:**
  + `Host`
  + `Origin`
  + `X-HTTP-Method-Override`
  + `X-HTTP-Method`
  + `X-Method-Override`

  圧縮オブジェクトのキャッシュの設定が有効になっているため、正規化された `Accept-Encoding` ヘッダーも含まれます。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。
+ **キャッシュキーに含まれる Cookie:** すべての Cookie が含まれます。
+ **キャッシュキーに含まれるクエリ文字列:** すべてのクエリ文字列が含まれます。
+ **圧縮オブジェクトのキャッシュの設定:** 有効。詳細については、「[圧縮のサポート](cache-key-understand-cache-policy.md#cache-policy-compressed-objects)」を参照してください。

# キャッシュキーを理解する
<a name="understanding-the-cache-key"></a>

*キャッシュキー*は、CloudFront エッジロケーションへのビューワーリクエストによって*キャッシュヒット*が発生するかどうかを決定します。キャッシュキーは、キャッシュ内のオブジェクトの固有の識別子です。キャッシュ内の各オブジェクトには、固有のキャッシュキーがあります。

キャッシュヒットは、ビューワーリクエストが以前のリクエストと同じキャッシュキーを生成し、そのキャッシュキーのオブジェクトがエッジロケーションのキャッシュにあり、有効な場合に発生します。キャッシュヒットが発生すると、リクエストされたオブジェクトが CloudFront エッジロケーションからビューワーに提供されます。これには以下のような利点があります。
+ オリジンサーバーの負荷を軽減
+ ビューワーのレイテンシーを低減

*キャッシュヒット率*が高い (キャッシュヒットにつながるビューワーリクエストの割合が高い) ほど、ウェブサイトやアプリケーションのパフォーマンスが高くなります。キャッシュヒット率を改善する 1 つの方法は、キャッシュキーに必要な最小値のみを含めることです。詳細については、次のセクションを参照してください。

[キャッシュポリシー](controlling-the-cache-key.md)を使用して、キャッシュキーの値 (URL クエリ文字列、HTTP ヘッダー、および cookie) を変更できます (ビューワーリクエストで [Lambda@Edgefunction](lambda-at-the-edge.md) または [CloudFront Function](cloudfront-functions.md) を使用してキャッシュキーを変更することもできます)。キャッシュキーを変更する前に、アプリケーションの設計方法と、ビューワーリクエストの特性に基づいてさまざまなレスポンスをいつ、どのように処理するかを理解することが重要です。ビューワーリクエストの値によってオリジンが返すレスポンスが決定された場合は、その値をキャッシュキーに含める必要があります。しかし、オリジンが返すレスポンスに影響を与えない値をキャッシュキーに含めると、重複したオブジェクトをキャッシュしてしまう可能性があります。

## デフォルトのキャッシュキー
<a name="cache-key-default"></a>

デフォルトでは、CloudFront ディストリビューションのキャッシュキーには以下の情報が含まれます。
+ CloudFront ディストリビューションのドメイン名 (d111111abcdef8.cloudfront.net など)
+ リクエストされたオブジェクトの URL パス (例: `/content/stories/example-story.html`)

**注記**  
この `OPTIONS` メソッドは、`OPTIONS` リクエストのキャッシュキーに含まれます。つまり、`OPTIONS` リクエストへのレスポンスは、`GET` リクエストおよび `HEAD` リクエストへのレスポンスとは別にキャッシュされます。

デフォルトでは、ビューワーリクエストのその他の値はキャッシュキーに含まれません。ウェブブラウザからの次の HTTP リクエストを考えてみましょう。

```
            GET /content/stories/example-story.html?ref=0123abc&split-pages=false HTTP/1.1
            Host: d111111abcdef8.cloudfront.net
            User-Agent: Mozilla/5.0 Gecko/20100101 Firefox/68.0
            Accept: text/html,*/*
            Accept-Language: en-US,en
            Cookie: session_id=01234abcd
            Referer: https://news.example.com/
```

この例のようなビューワーリクエストが CloudFront エッジロケーションに到達すると、CloudFront はキャッシュキーを使用してキャッシュヒットがあるかどうかを判断します。デフォルトでは、リクエストの `/content/stories/example-story.html` および `d111111abcdef8.cloudfront.net` コンポーネントのみがキャッシュキーに含まれます。リクエストされたオブジェクトがキャッシュにない場合 (キャッシュミス)、CloudFront は、オブジェクトを取得するためのリクエストをオリジンに送信します。オブジェクトを取得した後、CloudFront はビューワーに返し、エッジロケーションのキャッシュに保存します。

CloudFront が、キャッシュキーによって決定された同じオブジェクトに対する別のリクエストを受信すると、CloudFront はオリジンにリクエストを送信することなく、キャッシュされたオブジェクトをビューワーに即座に配信します。たとえば、前のリクエストの後に入ってくる次の HTTP リクエストを考えてみましょう。

```
            GET /content/stories/example-story.html?ref=xyz987&split-pages=true HTTP/1.1
            Host: d111111abcdef8.cloudfront.net
            User-Agent: Mozilla/5.0 AppleWebKit/537.36 Chrome/83.0.4103.116
            Accept: text/html,*/*
            Accept-Language: en-US,en
            Cookie: session_id=wxyz9876
            Referer: https://rss.news.example.net/
```

このリクエストは、前のリクエストと同じオブジェクトに対するものですが、前のリクエストとは異なります。これは、異なる URL クエリ文字列、異なる `Referer` ヘッダーと `User-Agent` ヘッダー、および異なる `session_id` Cookie を持っています。ただし、これらの値はデフォルトではキャッシュキーの一部ではないので、この 2 番目のリクエストはキャッシュヒットになります。

## キャッシュキーをカスタマイズする
<a name="cache-key-custom"></a>

場合によっては、キャッシュキーにさらに多くの情報を含める必要がありますが、そうするとキャッシュのヒット数が少なくなることがあります。[キャッシュポリシー](controlling-the-cache-key.md)を使用して、キャッシュキーに含める内容を指定します。

たとえば、オリジンサーバーがビューワーリクエストで `Accept-Language` HTTP ヘッダーを使用して、ビューワーの言語に基づいて異なるコンテンツを返す場合、このヘッダーをキャッシュキーに含めることができます。これを行うと、CloudFront はこのヘッダーを使用してキャッシュヒットを特定し、*オリジンリクエスト* (キャッシュミスが発生したときにオリジン CloudFront に送信するリクエスト) にヘッダーを含めます。

キャッシュキーに追加の値を含めると、ビューワーリクエストで発生する可能性のある変化により、CloudFront が重複したオブジェクトをキャッシュする可能性があります。たとえば、ビューワーは、`Accept-Language` ヘッダーに対して次の値のいずれかを送信できます。
+ `en-US,en`
+ `en,en-US`
+ `en-US, en`
+ `en-US`

これらの異なる値はすべて、ビューワーの言語が英語であることを示していますが、変化によって CloudFront が同じオブジェクトを複数回キャッシュする可能性があります。これにより、キャッシュヒットを減らし、オリジンリクエストの数を増やすことができます。キャッシュキーに `Accept-Language` ヘッダーを含めず、異なる言語のコンテンツに異なる URL を使用するようにウェブサイトまたはアプリケーションを設定することで、この重複を避けることができます (例: `/en-US/content/stories/example-story.html`)。

キャッシュキーに含める任意の値については、その値のバリエーションがビューワーリクエストに表示される可能性があることを理解しておく必要があります。特定のリクエスト値については、キャッシュキーに含めることはほとんど意味がありません。たとえば、`User-Agent` ヘッダーには何千もの固有のバリエーションがあるため、通常はキャッシュキーに含めるには適していません。ユーザー固有の値またはセッション固有の値を持ち、何千もの (または数百万) のリクエストで固有の Cookie も、キャッシュキーを含む候補には適していません。キャッシュキーにこれらの値を含めると、それぞれ固有のバリエーションによって、キャッシュ内のオブジェクトの別のコピーが作成されます。オブジェクトのこれらのコピーが固有でない場合、またはわずかに異なるオブジェクトが多数作成され、各オブジェクトが少数のキャッシュヒットのみを取得する場合は、別のアプローチを検討することをお勧めします。これらの非常に可変性の高い値をキャッシュキーから除外することも、オブジェクトをキャッシュ不可能としてマークすることもできます。

キャッシュキーをカスタマイズするときは注意が必要です。時には望ましいことがありますが、重複オブジェクトのキャッシュ、キャッシュヒット率の低下、オリジンリクエスト数の増加など、意図しない結果が生じる可能性があります。オリジンのウェブサイトまたはアプリケーションが、分析、テレメトリー、またはその他の用途に対するビューワーリクエストから特定の値を受け取る必要があるが、これらの値によってオリジンが返すオブジェクトが変更されない場合は、[オリジンリクエストポリシー](controlling-origin-requests.md)を使用してこれらの値をオリジンリクエストに含めますが、キャッシュキーには含め*ません*。