

# CloudFront が配信するコンテンツを追加、削除、または置き換える
<a name="AddRemoveReplaceObjects"></a>

このセクションでは、CloudFront がビューワーに配信するコンテンツにアクセスできることを確認する方法、ウェブサイトやアプリケーションでオブジェクトを指定する方法、およびコンテンツを削除または置換する方法を説明します。

**Topics**
+ [

## CloudFront が配信するコンテンツの追加とアクセス
](#AddingObjects)
+ [

# ファイルバージョニングを使用して CloudFront ディストリビューションでコンテンツを更新または削除する
](UpdatingExistingObjects.md)
+ [

# CloudFront でファイルの URL 形式をカスタマイズする
](LinkFormat.md)
+ [

# デフォルトのルートオブジェクトを指定する
](DefaultRootObject.md)
+ [

# ファイルを無効化してコンテンツを削除する
](Invalidation.md)
+ [

# 圧縮ファイルを供給する
](ServingCompressedFiles.md)

## CloudFront が配信するコンテンツの追加とアクセス
<a name="AddingObjects"></a>

CloudFront でコンテンツ (オブジェクト) を配信するときは、ディストリビューション用に指定したオリジンの 1 つにファイルを追加し、そのファイルに対する CloudFront リンクを公開します。CloudFront エッジロケーションは、ファイルに関するビューワーリクエストを受け取るまで、オリジンから新しいファイルを取得しません。詳細については、「[CloudFront がコンテンツを配信する方法](HowCloudFrontWorks.md)」を参照してください。

CloudFront で配信するファイルを追加するときは、ディストリビューションで指定した Amazon S3 バケットの 1 つに追加しているか、カスタムオリジンの場合は指定したドメイン内のディレクトリに追加していることを確認してください。さらに、該当するキャッシュ動作のパスパターンが正しいオリジンにリクエストを送信していることを確認します。

たとえば、キャッシュ動作のパスパターンが `*.html` であるとします。他のキャッシュ動作がない場合、CloudFront は、リクエストをそのオリジンに転送するように設定されている `*.html` ファイルのみを転送します。このシナリオでは、例えば .jpg ファイルが含まれているキャッシュ動作を作成していないため、そのオリジンにアップロードされた .jpg ファイルを CloudFront が配信することはありません。

CloudFront サーバーは、供給するオブジェクトの MIME タイプを判別しません。ファイルをオリジンにアップロードする場合、ファイルの `Content-Type` ヘッダーフィールドを設定することをお勧めします。

# ファイルバージョニングを使用して CloudFront ディストリビューションでコンテンツを更新または削除する
<a name="UpdatingExistingObjects"></a>

CloudFront がユーザーに代わって配信するように設定されている既存のコンテンツを更新するには、ファイル名またはフォルダ名にバージョン識別子を使用することをお勧めします。これにより、CloudFront が提供するコンテンツの管理を制御できます。

## バージョン付きのファイル名を使用して既存ファイルを更新する
<a name="ReplacingObjects"></a>

CloudFront ディストリビューション内の既存のファイルを更新する場合、何らかのバージョン識別名をファイル名またはディレクトリ名に含めて、コンテンツを容易に制御できるようにすることをお勧めします。この識別名には、日付タイムスタンプ、連番など、同じオブジェクトの 2 つのバージョンを区別する方法を使用できます。

たとえば、グラフィックファイルに image.jpg ではなく image\$11.jpg という名前を付けることができます。ファイルの新しいバージョンを供給する場合は、新しいファイルに image\$12.jpg という名前を付けて、image\$12.jpg を指すようにお使いのウェブアプリケーションまたはウェブサイトのリンクを更新します。また、すべてのグラフィックを images\$1v1 ディレクトリに配置することもできます。1 つ以上のグラフィックの新しいバージョンを供給する場合は、新しい images\$1v2 ディレクトリを作成し、そのディレクトリを指すようにリンクを更新します。バージョニングを行うことで、CloudFront で新しいバージョンの供給を開始するのにオブジェクトの有効期限切れを待つ必要がなくなり、オブジェクトの無効化に対して料金を支払う必要もなくなります。

ファイルにバージョンを設定した場合も、有効期限切れ日付を設定することをお勧めします。詳細については、「[コンテンツをキャッシュに保持する期間 (有効期限) を管理する](Expiration.md)」を参照してください。

**注記**  
バージョン付きのファイル名またはディレクトリ名の指定は、Amazon S3 オブジェクトのバージョニングとは関係がありません。

## コンテンツを削除して CloudFront が配信しないようにする
<a name="RemovingObjects"></a>

CloudFront ディストリビューションに含めたくないファイルをオリジンのファイルから削除することができます。ただし、CloudFront はファイルの有効期限が切れるまで引き続きエッジキャッシュからコンテンツをビューワーに表示します。

すぐにファイルを削除する場合は、次のいずれかを実行する必要があります。
+ **ファイルバージョニングを使用します。**バージョニングを使用する場合、異なるバージョンのファイルには、どのファイルがビューワーに返されるかを変更する CloudFront ディストリビューションで使用できる異なる名前があります。詳細については、「[バージョン付きのファイル名を使用して既存ファイルを更新する](#ReplacingObjects)」を参照してください。
+ **ファイルを無効化します。**詳細については、「[ファイルを無効化してコンテンツを削除する](Invalidation.md)」を参照してください。

# CloudFront でファイルの URL 形式をカスタマイズする
<a name="LinkFormat"></a>

CloudFront がビューワーに提供するオブジェクト (コンテンツ) をオリジンに設定した後は、CloudFront がそれを提供できるように、ウェブサイトまたはアプリケーションコード内のオブジェクトを参照する正しい URL を使用する必要があります。

ウェブページやウェブアプリケーションのオブジェクトの URL で使用するドメイン名には、次のいずれかを指定できます。
+ ディストリビューションを作成するときに CloudFront が自動的に割り当てる `d111111abcdef8.cloudfront.net` などのドメイン名
+ `example.com` など、独自のドメイン名

たとえば、`image.jpg` というファイルを返すために、次の URL のいずれかを使用します。

`https://d111111abcdef8.cloudfront.net/images/image.jpg`

`https://example.com/images/image.jpg`

Amazon S3 バケット、またはカスタムオリジンのどちらにコンテンツを保存しても、独自のウェブサーバーと同様、同じ URL 形式を使用します。

**注記**  
URL 形式は、ディストリビューションの [**Origin Path**] に指定した値によってある程度異なります。この値が CloudFront にオブジェクトの最上位ディレクトリパスを与えます。ウェブディストリビューションを作成する際のオリジンパスの設定の詳細については、「[オリジンのパス](DownloadDistValuesOrigin.md#DownloadDistValuesOriginPath)」を参照してください。

URL 形式の詳細については、次のセクションを参照してください。

## 独自のドメイン名 (example.com) を使用する
<a name="LinkFormat_OwnDomain"></a>

ディストリビューションを作成するときに CloudFront が割り当てるデフォルトのドメイン名を使用する代わりに、`example.com` などの、より簡単に使用できる[代替ドメイン名](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-web-values-specify.html#DownloadDistValuesCNAME)を追加できます。CloudFront で独自のドメイン名を設定すると、ディストリビューション内のオブジェクトにこのような URL を使用できます。

`https://example.com/images/image.jpg`

ビューワーと CloudFront の間で HTTPS を使用する予定がある場合は、「[代替ドメイン名と HTTPS を使用する](using-https-alternate-domain-names.md)」を参照してください。

## URL で末尾のスラッシュ (/) を使用する
<a name="LinkFormat_TrailingSlash"></a>

CloudFront ディストリビューション内のディレクトリの URL を指定するとき、末尾のスラッシュを常に使用するか、または、全く使用しないかを選択します。たとえば、すべての URL に対して次のいずれか 1 つの形式のみを選択します。

`https://d111111abcdef8.cloudfront.net/images/`

`https://d111111abcdef8.cloudfront.net/images`

**それが重要なのはなぜか。**

どちらの形式でも CloudFront オブジェクトへのリンクとして機能しますが、一貫性を持たせることで、後でディレクトリを無効にするときに問題を防ぐことができます。CloudFront は、末尾のスラッシュも含め、指定されたとおりに URL を保存します。形式に一貫性がない場合、スラッシュのあるディレクトリ URL とスラッシュのないものを無効にして、CloudFront がディレクトリを削除したことを確認する必要があります。

両方の URL 形式を無効にするのは不便で、追加コストが発生することがあります。これは、両方のタイプの URL をカバーするために無効化を二重に実行する場合、1 か月の無料の無効化回数の上限に達する可能性があるためです。そして、もしそのような事態になれば、CloudFront の各ディレクトリ URL にはただ 1 つの形式しか存在しない場合でも、すべての無効化に対して支払いをする必要があります。

## 制限されたコンテンツの署名付き URL を作成する
<a name="LinkFormat_SignedURLs"></a>

アクセスを制限するコンテンツがある場合は、署名付き URL を作成できます。たとえば、認証されたユーザーのみにコンテンツを配信する場合は、指定された期間のみ、または指定された IP アドレスからのみ有効な URL を作成できます。詳細については、「[署名付き URL と署名付き Cookie を使用したプライベートコンテンツを提供する](PrivateContent.md)」を参照してください。

# デフォルトのルートオブジェクトを指定する
<a name="DefaultRootObject"></a>

ユーザー (ビューワー) がディストリビューション内のオブジェクトではなくディストリビューションのルート URL をリクエストした場合に、特定のオブジェクト (デフォルトルートオブジェクト) を返すように CloudFront を設定できます。デフォルトルートオブジェクトを使用して、ディストリビューションのコンテンツの公開を回避できます。

**Contents**
+ [

## デフォルトルートオブジェクトを指定する方法
](#DefaultRootObjectHowToDefine)
+ [

## デフォルトのルートオブジェクトの仕組み
](#DefaultRootObjectHow)
+ [

## ルートオブジェクトを定義しない場合の CloudFront の動作
](#DefaultRootObjectNotSet)

## デフォルトルートオブジェクトを指定する方法
<a name="DefaultRootObjectHowToDefine"></a>

ディストリビューションのコンテンツが公開されたり、エラーが返されたりすることを回避するには、ディストリビューションのデフォルトルートオブジェクトを指定します。正確なファイル名またはファイルへのパスを指定できます。例えば、ルートオブジェクトが `index.html` ファイルの場合、そのファイル名を指定できます。`index.html` ファイルが別のフォルダにある場合は、代わりに `exampleFolderName/index.html` などのパスを指定します。デフォルトルートオブジェクトへのパスを設定すると、ディストリビューションのルート URL へのビューワーリクエストはそのパスから指定したファイルを返します。ファイルパスを使用すると、デフォルトルートオブジェクトをルートレベルではなくフォルダに配置できるため、オリジンでコンテンツをより柔軟に整理できます。<a name="DefaultRootObjectProcedure"></a>

**ディストリビューションのデフォルトルートオブジェクトを指定するには**

1. デフォルトルートオブジェクトを、ディストリビューションが指しているオリジンにアップロードします。

   ファイルには、CloudFront でサポートされるあらゆるタイプを使用できます。ファイル名に対する制約事項のリストについては、「*Amazon CloudFront API Reference*」の「[DistributionConfig](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_DistributionConfig.html)」で `DefaultRootObject` エレメントを参照してください。
**注記**  
デフォルトルートオブジェクトのファイル名が長すぎるか、そのファイル名に無効な文字が含まれている場合、CloudFront はエラー `HTTP 400 Bad Request - InvalidDefaultRootObject` を返します。また、CloudFront はコードをキャッシュに (デフォルトで) 10 秒間保持し、結果をアクセスログに書き込みます。

1. オブジェクトのアクセス許可によって CloudFront に少なくとも読み取りアクセス権が付与されていることを確認します。

   Amazon S3 のアクセス権限の詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[Amazon S3 での Identity and Access Management](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-access-control.html)」を参照してください。

1. CloudFront コンソールまたは CloudFront API を使用して、デフォルトルートオブジェクトを参照するようにディストリビューションを更新します。

   CloudFront コンソールを使用してデフォルトルートオブジェクトを指定するには:

   1. AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

   1. 上部ペインにあるディストリビューションのリストで、更新するディストリビューションを選択します。

   1. **[Settings]** (設定) ペインで、**[General]** (一般) タブの **[Edit]** (編集) を選択します。

   1. **[設定を編集]** ダイアログボックスの **[デフォルトルートオブジェクト]** フィールドに、デフォルトルートオブジェクトのファイル名またはパスを入力します。
**ヒント**  
文字列をスラッシュ (`/`) で始めることはできません。オブジェクト名またはオブジェクトへのパスのみを指定します。例えば、`index.html` または `exampleFolderName/index.html` を使用します。`/exampleFolderName/index.html` または `/index.html` を指定すると、[403 アクセス拒否エラー](http-403-permission-denied.md)が発生する可能性があります。

   1. **[Save changes]** (変更の保存) をクリックします。

   CloudFront API を使用して設定を更新するには、ディストリビューションの `DefaultRootObject` エレメントの値を指定します。CloudFront API を使用してデフォルトのルートオブジェクトを指定する方法については、Amazon CloudFront API リファレンス**の「[UpdateDistribution](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_UpdateDistribution.html)」を参照してください。

1. ルート URL を要求することで、デフォルトルートオブジェクトが有効になっていることを確認します。ブラウザにデフォルトルートオブジェクトが表示されない場合、以下のステップを実行します。

   1. CloudFront コンソールにディストリビューションのステータスを表示し、ディストリビューションが完全にデプロイされていることを確認します。

   1. ステップ 2 と 3 を繰り返し、適切な許可を付与したこと、およびデフォルトルートオブジェクトを指定するようにディストリビューションの構成を適切に更新したことを確認します。

## デフォルトのルートオブジェクトの仕組み
<a name="DefaultRootObjectHow"></a>

次のリクエストはオブジェクト `image.jpg` を指すとします。

`https://d111111abcdef8.cloudfront.net/image.jpg`

これに対して、最初の例のように、次のリクエストは特定のオブジェクトではなく、同じディストリビューションのルート URL を指します。

`https://d111111abcdef8.cloudfront.net/`

デフォルトルートオブジェクトを定義した場合、ディストリビューションのルートを呼び出すエンドユーザーリクエストはデフォルトルートオブジェクトを返します。たとえば、ファイル `index.html` をデフォルトルートオブジェクトとして指定したと仮定します。

`https://d111111abcdef8.cloudfront.net/`

戻り値:

`https://d111111abcdef8.cloudfront.net/index.html`

**注記**  
CloudFront は、末尾に複数のスラッシュ (`https://d111111abcdef8.cloudfront.net///`) が付いている URL が `https://d111111abcdef8.cloudfront.net/` と等しいかどうかを判断しません。オリジンサーバーがその比較を行います。

デフォルトルートオブジェクトを定義しても、ディストリビューションのサブディレクトリに対するエンドユーザーリクエストはデフォルトルートオブジェクトを返しません。例えば、`index.html` がデフォルトルートオブジェクトであり、CloudFront が CloudFront ディストリビューション下の `install` ディレクトリに対するエンドユーザーリクエストを受け取ったと仮定します。

`https://d111111abcdef8.cloudfront.net/install/`

`index.html` のコピーが `install` ディレクトリ内にあっても、CloudFront はデフォルトルートオブジェクトを返しません。ただし、デフォルトルートオブジェクトへの*パス* (`install/index.html`) を指定すると、CloudFront は `install` ディレクトリへのエンドユーザーリクエストにデフォルトルートオブジェクトを返します。

CloudFront がサポートするすべての HTTP メソッドを許可するようにディストリビューションを設定する場合、デフォルトのルートオブジェクトがすべてのメソッドに適用されます。例えば、デフォルトのルートオブジェクトが index.php であり、`POST` リクエストをドメインのルート (https://example.com) に送信するようにアプリケーションを作成するなら、CloudFront はリクエストを https://example.com/index.php に送信します。

CloudFront のデフォルトルートオブジェクトの動作は、Amazon S3 のインデックスドキュメントの動作とは異なります。Amazon S3 バケットをウェブサイトとして設定し、インデックスドキュメントを指定した場合、ユーザーがバケット内のサブディレクトリを要求しても、Amazon S3 はインデックスドキュメントを返します。(インデックスドキュメントのコピーがすべてのサブディレクトリに含まれる必要があります)。Amazon S3 バケットをウェブサイトとして設定する方法とインデックスドキュメントの詳細については、*Amazon Simple Storage Service ユーザーガイド*の「[Amazon S3 でのウェブサイトのホスティング](https://docs.aws.amazon.com/AmazonS3/latest/userguide/WebsiteHosting.html)」を参照してください。

**重要**  
デフォルトルートオブジェクトは CloudFront ディストリビューションにのみ適用されることに注意してください。オリジンのセキュリティを依然として管理する必要があります。例えば、Amazon S3 オリジンを使用する場合、Amazon S3 バケットの ACL も依然として適切に設定する必要があり、バケットに対する必要なアクセスレベルを確保する必要があります。

## ルートオブジェクトを定義しない場合の CloudFront の動作
<a name="DefaultRootObjectNotSet"></a>

デフォルトルートオブジェクトを定義しない場合、ディストリビューションのルートの要求はオリジンサーバーに渡されます。Amazon S3 オリジンを使用する場合、以下のいずれかが返される場合があります。
+ **Amazon S3 バケットのコンテンツのリスト** – 以下のいずれかの条件が満たされる場合、CloudFront を使用してディストリビューションにアクセスするユーザーにオリジンのコンテンツが表示されます。
  + バケットが適切に構成されていない。
  + ディストリビューションに関連付けられているバケット、およびバケット内のオブジェクトに対する Amazon S3 アクセス許可で、*すべてのユーザー*にアクセスが付与されている。
  + エンドユーザーがオリジンのルート URL を使用してオリジンにアクセスしている。
+ **オリジンのプライベートコンテンツのリスト** – オリジンをプライベートディストリビューション (設定者と CloudFront のみがアクセス可能) として設定している場合、ディストリビューションに関連付けられた Amazon S3 バケットのコンテンツは、CloudFront 経由でディストリビューションにアクセスできる認証情報を持っているユーザーにも表示されます。この場合、ユーザーは、オリジンのルート URL を使用してコンテンツにアクセスできません。プライベートコンテンツの配信の詳細については、「[署名付き URL と署名付き Cookie を使用したプライベートコンテンツを提供する](PrivateContent.md)」を参照してください。
+ `Error 403 Forbidden` – CloudFront は、ディストリビューションに関連付けられた Amazon S3 バケットに対する許可またはそのバケット内のオブジェクトに対する許可によって CloudFront およびすべてのユーザーのアクセスが拒否された場合にこのエラーを返します。

# ファイルを無効化してコンテンツを削除する
<a name="Invalidation"></a>

有効期限切れになる前に CloudFront エッジキャッシュからファイルを削除する場合、以下のいずれかの処理を行うことができます。
+ エッジキャッシュからファイルを無効にします。ビューワーが次にファイルをリクエストしたときに、CloudFront はオリジンに戻ってファイルの最新バージョンをフェッチします。
+ ファイルのバージョニングを使用して、異なる名前を持つ異なるバージョンのファイルを供給します。詳細については、「[バージョン付きのファイル名を使用して既存ファイルを更新する](UpdatingExistingObjects.md#ReplacingObjects)」を参照してください。

**Topics**
+ [

## ファイルを無効化するか、バージョン付きファイル名を使用するかを選択する
](#Invalidation_Expiration)
+ [

# 無効にするファイルを決定する
](invalidation-access-logs.md)
+ [

# ファイルを無効にするときに知っておくべきこと
](invalidation-specifying-objects.md)
+ [

# ファイルを無効化する
](Invalidation_Requests.md)
+ [

# 同時無効化リクエストの最大制限
](InvalidationLimits.md)
+ [

# ファイルの無効化に対する支払い
](PayingForInvalidation.md)

## ファイルを無効化するか、バージョン付きファイル名を使用するかを選択する
<a name="Invalidation_Expiration"></a>

ディストリビューションから供給されるファイルのバージョンを制御するには、ファイルを無効にするか、バージョン付きファイル名をファイルに設定します。ファイルを頻繁に更新する必要がある場合は、以下の理由で、ファイルのバージョニングを第一に使用することをお勧めします。
+ バージョニングを使用すると、ローカルにキャッシュされている、または企業のキャッシュプロキシの背後にキャッシュされているバージョンをユーザーが保持している場合でも、リクエストがどのファイルを返すかを制御できます。ファイルを無効にした場合、キャッシュ内でオブジェクトが有効期限切れになるまで、ユーザーに旧バージョンが引き続き表示されることがあります。
+ CloudFront アクセスログにファイル名が含まれるので、バージョニングを使用すると、ファイルの変更結果の分析が容易になります。
+ バージョニングは、さまざまなバージョンのファイルをさまざまなユーザーに供給する方法を提供します。
+ バージョニングによって、ファイルのリビジョン間のロールフォワードとロールバックが簡素化されます。
+ バージョニングのほうが、コストが安くなります。CloudFront が新しいバージョンのファイルをエッジロケーションに転送することに関して料金を支払う必要がありますが、ファイルの無効化に関して料金を支払う必要はありません。

ファイルのバージョニングの詳細については、[バージョン付きのファイル名を使用して既存ファイルを更新する](UpdatingExistingObjects.md#ReplacingObjects) を参照してください。

# 無効にするファイルを決定する
<a name="invalidation-access-logs"></a>

ディレクトリ内のすべてのファイルや、名前が同じ文字で始まるすべてのファイルなど、複数のファイルを無効にする場合は、無効化パスの末尾に `*` ワイルドカードを含めることができます。`*` ワイルドカードの使用の詳細については、「[Invalidation paths](invalidation-specifying-objects.md#invalidation-specifying-objects-paths)」を参照してください。

ファイルを無効にするには、個々のファイルのパスまたは `*` ワイルドカードで終わるパスのいずれかを指定します。これは次の例に示すように、1 つまたは複数のファイルに適用できます。
+ `/images/image1.jpg`
+ `/images/image*`
+ `/images/*`

選択されたファイルを無効にする必要があり、ユーザーがオリジンのすべてのファイルに必ずしもアクセスしない場合は、ビューワーが CloudFront からどのファイルを要求したかを確認し、そのファイルのみを無効にできます。ビューワーがどのファイルを要求したかを確認するには、CloudFront アクセスログの作成を有効にします。アクセスログの詳細については、「[アクセスログ (標準ログ)](AccessLogs.md)」を参照してください。

# ファイルを無効にするときに知っておくべきこと
<a name="invalidation-specifying-objects"></a>

無効にするファイルを指定するときには、次の情報を参照してください。

**大文字と小文字の区別**  
無効化パスでは大文字と小文字が区別されます。例えば、`/images/image.jpg` と `/images/Image.jpg` は 2 つの異なるファイルを指定します。

**Lambda 関数を使用した URI の変更**  
CloudFront ディストリビューションがビューワーリクエストイベントで Lambda 関数をトリガーして、関数がリクエストされたファイルの URI を変更する場合、CloudFront エッジキャッシュからファイルを削除するために両方の URI を無効にすることを推奨します。  
+ ビューワーリクエストの URI
+ 関数による変更後の URI

**Example 例**  
Lambda 関数が以下のファイルの URI を、  
`https://d111111abcdef8.cloudfront.net/index.html`  
言語ディレクトリを含む URI に変更するとします。  
`https://d111111abcdef8.cloudfront.net/en/index.html`  
ファイルを無効にするには、次のパスを指定する必要があります。  
+ `/index.html`
+ `/en/index.html`
詳しくは、「[Invalidation paths](#invalidation-specifying-objects-paths)」を参照してください。

 **デフォルトのルートオブジェクト**  
デフォルトルートオブジェクト (ファイル) を無効にする場合、他のファイルのパスを指定する場合と同じ方法でパスを指定します。詳細については、「[デフォルトのルートオブジェクトの仕組み](DefaultRootObject.md#DefaultRootObjectHow)」を参照してください。

 **Cookie の転送**  
オリジンに Cookie を転送するように CloudFront を設定した場合、CloudFront エッジキャッシュにファイルの複数のバージョンが含まれることがあります。ファイルを無効にすると、CloudFront は、関係付けられた Cookie に関係なく、そのファイルのキャッシュされたあらゆるバージョンを無効にします。一部のバージョンを選択して無効にすることも、関連付けられた Cookie に基づいてその他のバージョンを選択して無効にすることもできません。詳しくは、「[Cookie に基づいてコンテンツをキャッシュする](Cookies.md)」を参照してください。

 **ヘッダーの転送**  
ヘッダーのホワイトリストをオリジンに転送し、ヘッダーの値に基づいてキャッシュするように CloudFront を設定した場合、CloudFront エッジキャッシュにファイルの複数のバージョンが含むまれることがあります。ファイルを無効にすると、CloudFront は、ヘッダー値に関係なく、そのファイルのキャッシュされたあらゆるバージョンを無効にします。ヘッダー値に基づいて一部のバージョンのみ選択して無効にすることはできません (すべてのヘッダーをオリジンに転送するように CloudFront を設定した場合、CloudFront はファイルをキャッシュしません)。詳しくは、「[リクエストヘッダーに基づいてコンテンツをキャッシュする](header-caching.md)」を参照してください。

 **クエリ文字列の転送**  
クエリ文字列をオリジンに転送するように CloudFront を設定している場合、次の例に示すように、ファイルを無効にするときにクエリ文字列を含める必要があります。  
+ `/images/image.jpg?parameter1=a`
+ `/images/image.jpg?parameter1=b`
クライアントリクエストに、同じファイルに対する 5 つの異なるクエリ文字列が含まれる場合、クエリ文字列ごとに 1 回ずつ、5 回を無効にするか、次の例に示すように個別の無効化パスに \$1 ワイルドカードを使用できます。  
`/images/image.jpg*`  
無効化パスでのワイルドカードの使用の詳細については、「[Invalidation paths](#invalidation-specifying-objects-paths)」を参照してください。  
クエリ文字列の詳細については、「[クエリ文字列パラメータに基づいてコンテンツをキャッシュする](QueryStringParameters.md)」を参照してください。  
使用中のクエリ文字列を確認するには、CloudFront ログ作成を有効にすることができます。詳しくは、「[アクセスログ (標準ログ)](AccessLogs.md)」を参照してください。

**最大許容数**  
許可される無効化の最大許容値については、「[同時無効化リクエストの最大制限](InvalidationLimits.md)」を参照してください。

 **Microsoft Smooth Streaming ファイル**  
対応するキャッシュ動作に対してスムーズストリーミングを有効にした場合は、Microsoft Smooth Streaming 形式のメディアファイルを無効にすることはできません。

 **パス内の ASCII 以外の文字または安全ではない文字**  
パスに ASCII 以外の文字が含まれるか、[RFC 1738](https://tools.ietf.org/html/rfc1738) に規定された安全ではない文字が含まれる場合、その文字を URL エンコードします。パスに含まれる他の文字を URL エンコードしないでください。URL エンコードした場合、CloudFront は、更新されたファイルの旧バージョンを無効にしません。  
パスに `~` 文字を使用しないでください。CloudFront は、URL エンコードされているかどうかにかかわらず、この文字の無効化をサポートしていません。

 **無効化パス**  
パスはディストリビューションを基準とする相対パスです。例えば、`https://d111111abcdef8.cloudfront.net/images/image2.jpg` のファイルを無効にするには、`/images/image2.jpg` を指定します。  
[CloudFront コンソール](https://console.aws.amazon.com/cloudfront/v4/home)では、`images/image2.jpg` のようにパスの先頭のスラッシュを省略できます。CloudFront API を直接使用する場合、無効化パスは先頭にスラッシュを付ける必要があります。
`*` ワイルドカードを使用して、同時に複数のファイルを無効にすることもできます。0 個以上の文字を置き換える `*` は、無効化パスの最後の文字である必要があります。  
無効化でワイルドカード (\$1) を使用するには、ワイルドカードをパスの末尾に配置する必要があります。アスタリスク (\$1) をその他の場所に挿入すると、ワイルドカード無効化の代わりにリテラル文字の一致として扱われます。
ファイルの無効化に AWS Command Line Interface (AWS CLI) を使用し、`*` ワイルドカードが含まれるパスを指定する場合は、`"/*"` のようにパスを引用符 (`"`) で囲む必要があります。  
パスの最大長は 4000 文字です。  

**Example 例: 無効化パス**  
+ ディレクトリ内のすべてのファイルを無効にするには:

  `/`*directory-path*`/*`
+ ディレクトリ、そのすべてのサブディレクトリ、およびそのディレクトリとサブディレクトリのすべてのファイルを無効にするには:

  `/`*directory-path*`*`
+ 同じ名前でファイル名拡張子が異なるすべてのファイル (logo.jpg、logo.png、logo.gif など) を無効にするには:

  `/`*directory-path*`/`*file-name*`.*`
+ ファイル名拡張子にかかわらず、ディレクトリ内でファイル名が同じ文字で始まるすべてのファイル (HLS 形式の動画のすべてのファイルなど) を無効にするには:

  `/`*directory-path*`/`*initial-characters-in-file-name*`*`
+ クエリ文字列パラメータに基づいてキャッシュするように CloudFront を設定し、ファイルのすべてのバージョンを無効にするには:

  `/`*directory-path*`/`*file-name*`.`*file-name-extension*`*`
+ ディストリビューション内のすべてのファイルを無効にするには:

  `/*`
Lambda 関数を使用して URI を変更する場合のファイルの無効化の詳細については、「[Changing the URI Using a Lambda Function](#invalidation-lambda-at-edge)」を参照してください。  
無効化パスがディレクトリであり、ディレクトリの指定方法 (末尾のスラッシュ (/) を付けるかどうか) を標準化していない場合、末尾のスラッシュを付けたディレクトリと付けないディレクトリの両方を無効にすることをお勧めします (例: `/images` および `/images/`)。

**書名付き URL**  
署名付き URL を使用している場合は、URL の疑問符 (?) の前の部分のみを含めてファイルを無効にします。

# ファイルを無効化する
<a name="Invalidation_Requests"></a>

CloudFront コンソールを使用して、無効化の作成と実行、以前に送信された無効化のリストの表示、および個々の無効化に関する詳細情報の表示を行うことができます。また、既存の無効化をコピーしたり、ファイルパスのリストを編集したり、編集された無効化を実行したりもできます。無効化をリストから削除することはできません。

**Contents**
+ [

## ファイルを無効化する
](#invalidating-objects-console)
+ [

## 既存の無効化のコピー、編集、および再実行を行う
](#invalidating-objects-copy-console)
+ [

## 無効化をキャンセルする
](#canceling-invalidations)
+ [

## 無効化のリストを表示する
](#listing-invalidations-console)
+ [

## 無効化に関する情報を表示する
](#invalidation-details-console)

## ファイルを無効化する
<a name="invalidating-objects-console"></a>

CloudFront コンソールを使用してファイルを無効にするには、以下を実行します。

------
#### [ Console ]<a name="invalidating-objects-console-procedure"></a>

**ファイルを無効化するには (コンソール）**

1. AWS マネジメントコンソールにサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 無効にするファイルのディストリビューションを選択します。

1. [**Invalidations**] タブを選択します。

1. [**Create Invalidation**] を選択します。

1. 無効にするファイルについて、1 行ごとに 1 つの無効化パスを入力します。無効パスの指定の詳細については、「[ファイルを無効にするときに知っておくべきこと](invalidation-specifying-objects.md)」を参照してください。
**重要**  
ファイルパスを慎重に指定します。無効化リクエストは開始後にキャンセルすることはできません。

1. [**Create Invalidation**] を選択します。

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

オブジェクトの無効化と、無効化に関する情報の表示については、「Amazon CloudFront API リファレンス」の以下のトピックを参照してください。**
+ [CreateInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html) 
+ [ListInvalidations](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListInvalidations.html)
+ [GetInvalidation](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_GetInvalidation.html)

**注記**  
ファイルの無効化に AWS Command Line Interface (AWS CLI) を使用し、`*` ワイルドカードが含まれるパスを指定する場合は、以下の例のようにパスを引用符 (`"`) で囲む必要があります。  

```
aws cloudfront create-invalidation --distribution-id distribution_ID --paths "/*"
```

------

## 既存の無効化のコピー、編集、および再実行を行う
<a name="invalidating-objects-copy-console"></a>

以前に作成した無効化をコピーし、無効化パスのリストを更新して、更新した無効化を実行することができます。既存の無効化をコピーし、無効化パスを更新して、更新した無効化を実行せずに保存することはできません。

**重要**  
進行中の無効化をコピーし、無効化パスのリストを更新して、更新した無効化を実行した場合、コピーした無効化を CloudFront が停止または削除することはありません。ある無効化パスがファイルとコピーの両方に含まれる場合、CloudFront はこのファイルの無効化を 2 回試みます。この 2 回の無効化は月ごとの無料の無効化の最大数に対してカウントされます。無料で行うことができる無効化の最大数に既に達している場合は、各ファイルの両方の無効化に対して料金が発生します。詳細については、「[同時無効化リクエストの最大制限](InvalidationLimits.md)」を参照してください。<a name="invalidating-objects-copy-console-procedure"></a>

**既存の無効化のコピー、編集、および再実行を行うには**

1. AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. コピーする無効化が含まれるディストリビューションを選択します。

1. [**Invalidations**] タブを選択します。

1. コピーする無効化を選択します。

   コピーする無効化が不明な場合は、無効化を選択し、[**View details**] を選択すると、その無効化の詳細情報が表示されます。

1. **[新規にコピー]** を選択します。

1. 必要に応じて、無効化パスのリストを更新します。

1. [**Create Invalidation**] を選択します。

## 無効化をキャンセルする
<a name="canceling-invalidations"></a>

CloudFront に無効化リクエストを送信すると、そのリクエストは数秒以内にすべてのエッジロケーションに転送されて、各エッジロケーションで直ちに無効化の処理が開始されます。そのため、無効化を送信後にキャンセルすることはできません。

## 無効化のリストを表示する
<a name="listing-invalidations-console"></a>

CloudFront コンソールを使用して、ディストリビューションにおいて作成および実行された最後の 100 個の無効化のリストを表示できます。100 個を超える無効化のリストを取得する場合は、`ListInvalidations` API 操作を使用します。詳細については、*Amazon CloudFront API リファレンス*の「[ListInvalidations](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_ListInvalidations.html)」を参照してください。<a name="listing-invalidations-console-procedure"></a>

**無効化のリストを表示するには**

1. AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 無効化リストの表示の対象となるディストリビューションを選択します。

1. [**Invalidations**] タブを選択します。

**注記**  
無効化をリストから削除することはできません。

## 無効化に関する情報を表示する
<a name="invalidation-details-console"></a>

ディストリビューション ID、無効化 ID、無効化のステータス、無効化が作成された日時、無効化パスの完全リストを含め、無効化に関する詳細情報を表示できます。<a name="invalidation-details-console-procedure"></a>

**無効化に関する情報を表示するには**

1. AWS マネジメントコンソール にサインインし、[https://console.aws.amazon.com/cloudfront/v4/home](https://console.aws.amazon.com/cloudfront/v4/home) で CloudFront コンソールを開きます。

1. 詳細情報の表示の対象となる無効化が含まれるディストリビューションを選択します。

1. [**Invalidations**] タブを選択します。

1. 該当する無効化 ID を選択するか、無効化 ID を選択してから、[**詳細を表示**] を選択します。

# 同時無効化リクエストの最大制限
<a name="InvalidationLimits"></a>

ファイルを個別に無効にする場合は、進行中のディストリビューションごとに最大 3,000 個のファイルまで、一度に無効化リクエストを作成できます。これは、最大 3,000 個のファイルに対する 1 つの無効化リクエスト、1 つのファイルに対する最大 3,000 個のリクエスト、または 3,000 個のファイルを超えないその他の任意の組み合わせとすることができます。たとえば、それぞれ 100 個のファイルを無効にする 30 個の無効化リクエストを送信できます。30 個の無効化リクエストがすべてまだ実行中である限り、それ以上の無効化リクエストを送信することはできません。この最大制限を超えた場合、CloudFront はエラーメッセージを返します。

\$1 ワイルドカードを使用している場合、最大 15 個の無効化パスのリクエストを一度に作成できます。また、進行中のディストリビューションごとに最大 3,000 個の個別のファイルを同時に作成することができます。ワイルドカードの無効化リクエストの最大制限は、ファイルの個別の無効化の最大制限とは無関係です。

# ファイルの無効化に対する支払い
<a name="PayingForInvalidation"></a>

1 か月に送信した無効化パスのうち、最初の 1,000 件は無料です。1 か月に 1,000 件を超えると、無効化パス 1 件ごとに支払いが発生します。無効なパスは 1 つのファイル (`/images/logo.jpg` など) に対して、または複数のファイル (`/images/*`) に対して発生する場合があります。CloudFront が無数のファイルを無効にした場合でも、ワイルドカード `*` は 1 つのパスとして含まれます。

1 か月あたり 1,000 個の無料の無効化パスの上限は、1 つの AWS アカウントで作成するすべてのディストリビューションの無効化パスの合計数に対して適用されます。例えば、AWS アカウント `john@example.com` を使用して 3 個のディストリビューションを作成し、ある月に、*各ディストリビューション*に 600 個の無効化パス (合計で 1,800 個の無効化パス) を送信した場合、AWS は、無効化パスの合計数と 1,000 個の無料制限との差額を請求します。この例では、AWS はその月に 800 の無効化パスに対して課金します。

無効化パスを送信する料金は、無効にするファイルの数に関係なく同じです。つまり、1 つのファイル (`/images/logo.jpg`) であっても、ディストリビューションに関連付けられたすべてのファイル (`/*`) であっても同じです。無効化リクエストではパスごとに課金されるため、複数のパスを 1 つのリクエストにまとめた場合でも、請求の目的においては各パスが依然として個別にカウントされます。

無効化の料金に関する詳細情報については、「[Amazon CloudFront 料金表](https://aws.amazon.com/cloudfront/pricing/)」を参照してください。無効化パスの詳細については、「[Invalidation paths](invalidation-specifying-objects.md#invalidation-specifying-objects-paths)」を参照してください。

# 圧縮ファイルを供給する
<a name="ServingCompressedFiles"></a>

リクエストされたオブジェクトを圧縮するとオブジェクトが小さくなるため、ダウンロード時間を短縮できます。場合によっては、元のサイズの 4 分の 1 未満になることがあります。特に、JavaScript および CSS ファイルでは、ダウンロードが速くなると、ビューワーにウェブページが表示されるまでの時間が短縮されます。さらに、CloudFront データ転送のコストは、供給されるデータの合計量に基づきます。圧縮ファイルを供給すると、非圧縮ファイルを供給するよりもコストが安くなる可能性があります。

**Topics**
+ [

## オブジェクトを圧縮するように CloudFront を設定する
](#compressed-content-cloudfront-configuring)
+ [

## CloudFront 圧縮の仕組み
](#compressed-content-cloudfront-how-it-works)
+ [

## 圧縮の条件
](#compressed-content-cloudfront-notes)
+ [

## CloudFront が圧縮するファイルタイプ
](#compressed-content-cloudfront-file-types)
+ [

## `ETag` ヘッダーの変換
](#compressed-content-cloudfront-etag-header)

## オブジェクトを圧縮するように CloudFront を設定する
<a name="compressed-content-cloudfront-configuring"></a>

オブジェクトを圧縮するように CloudFront を設定するには、圧縮オブジェクトを供給するキャッシュ動作を更新します。

**オブジェクトを圧縮するように CloudFront を設定するには (コンソール)**

1. [CloudFront コンソール](https://console.aws.amazon.com/cloudfront/v4/home)にサインインします。

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

1. **[オブジェクトを自動的に圧縮]** 設定では、**[はい]** を選択します。

1. [キャッシュポリシー](controlling-the-cache-key.md)を使用してキャッシュ設定を指定し、**[Gzip]** と **[Brotli]** の両方の圧縮形式を有効にします。

**注意事項**  
Brotli 圧縮を使用するには、[キャッシュポリシー](controlling-the-cache-key.md)を使用する必要があります。Brotli はレガシーキャッシュ設定をサポートしていません。
[CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-cloudfront-distribution-cachebehavior.html) または [CloudFront](https://docs.aws.amazon.com/cloudfront/latest/APIReference/Welcome.html) API を使用して圧縮を有効にするには、`Compress`、`EnableAcceptEncodingGzip`、`EnableAcceptEncodingBrotli` パラメータを `true` に設定します。

CloudFront がオブジェクトを圧縮する方法を理解するには、次のセクションを参照してください。

## CloudFront 圧縮の仕組み
<a name="compressed-content-cloudfront-how-it-works"></a>

1. ビューワーがオブジェクトを要求する ビューワーにより `Accept-Encoding` HTTP ヘッダーがリクエストに含められます。ヘッダー値には `gzip`、`br`、またはその両方が含められます。これは、ビューワーが圧縮オブジェクトをサポートすることを示します。ビューワーが Gzip と Brotli の両方をサポートしている場合、CloudFront では Brotli を使用します。
**注記**  
ウェブブラウザ Chrome および Firefox では、HTTPS を使用してリクエストを送信する場合のみ、Brotli 圧縮をサポートします。これらのブラウザでは、HTTP リクエストでの Brotli はサポートしていません。

1. CloudFront では、エッジロケーションで、リクエストされたオブジェクトの圧縮コピーのキャッシュを確認します。

1. 圧縮オブジェクトがキャッシュにあるかどうかに応じて、CloudFront は次のいずれかを実行します。
   + 圧縮オブジェクトが既にキャッシュにある場合、CloudFront ではそのオブジェクトをビューワーに送信し、残りの手順をスキップします。
   + 圧縮オブジェクトがキャッシュにない場合、CloudFront がリクエストをオリジンに転送します。
**注記**  
オブジェクトの非圧縮のコピーがすでにキャッシュにある場合、CloudFront はリクエストをオリジンに転送せずにビューワーに送信することがあります。例えば、CloudFront が[以前に圧縮をスキップした](#compression-skipped)場合に、この現象が起こる可能性があります。この場合、CloudFront では非圧縮オブジェクトをキャッシュし、オブジェクトが有効期限切れになるか、削除されるか、あるいは無効になるまで、処理を継続します。

1. オリジンが圧縮オブジェクトを返す場合 (HTTP レスポンスの `Content-Encoding` ヘッダーに示されているように)、CloudFront では圧縮オブジェクトをビューワーに送信し、それをキャッシュに追加して、残りの手順をスキップします。CloudFront では、オブジェクトを再度圧縮することはありません。

1. オリジンが HTTP レスポンスに `Content-Encoding` ヘッダーがない状態で CloudFront に非圧縮オブジェクトを返す場合、CloudFront ではオブジェクトが圧縮可能かどうかを判断します。詳細については、「[圧縮の条件](#compressed-content-cloudfront-notes)」を参照してください。

1. オブジェクトが圧縮できる場合、CloudFront ではオブジェクトを圧縮して、それをビューワーに送信し、キャッシュに追加します。

1. 以降、同じオブジェクトに対するビューワーリクエストがある場合、CloudFront は最初のキャッシュ済みバージョンを返します。例えば、ビューワーが Gzip 圧縮を使用する特定のキャッシュされたオブジェクトをリクエストして、ビューワーが Gzip 形式を*受け入れる*と、ビューワーが Brotli と Gzip の両方を受け入れる場合でも、同じオブジェクトに対する以降のリクエストには常に Gzip バージョンが返されます。

一部のカスタムオリジンでは、オブジェクトを圧縮することもできます。オリジンでは、CloudFront で圧縮されないオブジェクトを圧縮できる場合があります。詳細については、「[CloudFront が圧縮するファイルタイプ](#compressed-content-cloudfront-file-types)」を参照してください。

## 圧縮の条件
<a name="compressed-content-cloudfront-notes"></a>

CloudFront でオブジェクトを圧縮しないシナリオの詳細については、次のリストを参照してください。

**リクエストで HTTP 1.0 が使用される**  
CloudFront へのリクエストで HTTP 1.0 が使用される場合、CloudFront では `Accept-Encoding` ヘッダーを削除し、レスポンスのオブジェクトを圧縮しません。

**`Accept-Encoding` リクエストヘッダー**  
ビューワーリクエストに `Accept-Encoding` ヘッダーがない場合、またはヘッダーに `gzip` または `br` が値として含まれていない場合、CloudFront ではレスポンスのオブジェクトを圧縮しません。`Accept-Encoding` ヘッダーに追加の値 (`deflate` など) が含まれる場合、CloudFront ではそれらを削除してからリクエストをオリジンに転送します。  
CloudFront が[オブジェクトを圧縮するように設定されている](#compressed-content-cloudfront-configuring)場合、キャッシュキーとオリジンリクエストに `Accept-Encoding` ヘッダーが自動的に含められます。

**オブジェクトが圧縮されるように CloudFront を設定すると、コンテンツがすでにキャッシュされている**  
CloudFront では、オブジェクトをオリジンから取得したときにそのオブジェクトを圧縮します。オブジェクトが圧縮されるように CloudFront を設定した場合、CloudFront では、すでにエッジロケーションでキャッシュされたオブジェクトを圧縮しません。さらに、キャッシュされたオブジェクトがエッジロケーションで有効期限切れになり、CloudFront でオブジェクトに対する別のリクエストをオリジンに転送した場合に、HTTP ステータスコード 304 がオリジンから返されると、CloudFront ではファイルを圧縮しません。つまり、エッジロケーションには既に最新バージョンのオブジェクトがあります。エッジロケーションですでにキャッシュされているオブジェクトを CloudFront で圧縮するには、これらのオブジェクトを無効にする必要があります。詳細については、「[ファイルを無効化してコンテンツを削除する](Invalidation.md)」を参照してください。

**オブジェクトが圧縮されるようにオリジンがすでに設定されている**  
オブジェクトが圧縮されるように CloudFront を設定し、オリジンでもオブジェクトが圧縮される場合、オリジンには `Content-Encoding` ヘッダーが含まれている必要があります。このヘッダーは、オブジェクトが既に圧縮されていることを CloudFront に示します。オリジンからのレスポンスに `Content-Encoding` ヘッダーが含まれる場合、ヘッダーの値に関係なく CloudFront ではオブジェクトを圧縮しません。CloudFront ではレスポンスをビューワーに送信し、エッジロケーションでオブジェクトをキャッシュします。

**CloudFront が圧縮するファイルタイプ**  
詳細な一覧については、「[CloudFront が圧縮するファイルタイプ](#compressed-content-cloudfront-file-types)」を参照してください。

**CloudFront で圧縮するオブジェクトのサイズ**  
CloudFront では サイズが 1,000～10,000,000 バイトのオブジェクトを圧縮します。

**`Content-Length` ヘッダー**  
オリジンは、レスポンスに `Content-Length` ヘッダーを含める必要があります。これは、オブジェクトのサイズが CloudFront で圧縮できる範囲にあるかどうかを判断するために使用されるものです。`Content-Length` ヘッダーがない、無効な値が含まれている、または CloudFront で圧縮できるサイズの範囲外の値が含まれている場合、CloudFront はオブジェクトを圧縮しません。CloudFront がサイズ範囲を超える可能性のある大きなオブジェクトを処理する方法の詳細については、「[CloudFront がオブジェクトの部分的リクエスト (レンジ GET) を処理する方法](RangeGETs.md)」を参照してください。

**レスポンスの HTTP ステータスコード**  
CloudFront では、レスポンスの HTTP ステータスコードが `200`、`403`、または `404` の場合にのみ、オブジェクトが圧縮されます。

**レスポンスに本文がない**  
オリジンからの HTTP レスポンスに本文がない場合、CloudFront で圧縮するものはありません。

**`ETag` ヘッダー**  
CloudFront では、オブジェクトを圧縮するときに HTTP レスポンスの `ETag` ヘッダーを変更することがあります。詳細については、「[`ETag` ヘッダーの変換](#compressed-content-cloudfront-etag-header)」を参照してください。

**CloudFront が圧縮をスキップする**  
CloudFront はベストエフォートベースでオブジェクトを圧縮します。まれに、CloudFront のトラフィック負荷が高い場合、CloudFront はオブジェクトの圧縮をスキップします。CloudFront は、ホスト容量を含むさまざまな要因に基づいて、この決定を行います。CloudFront がオブジェクトの圧縮をスキップした場合、非圧縮オブジェクトをキャッシュし、オブジェクトが有効期限切れになるか、削除されるか、無効になるまで、処理を継続します。

## CloudFront が圧縮するファイルタイプ
<a name="compressed-content-cloudfront-file-types"></a>

オブジェクトが圧縮されるように CloudFront を設定すると、CloudFront が `Content-Type` レスポンスヘッダーに次の値を持つオブジェクトだけを圧縮します。
+ `application/dash+xml`
+ `application/eot`
+ `application/font`
+ `application/font-sfnt`
+ `application/javascript`
+ `application/json`
+ `application/opentype`
+ `application/otf`
+ `application/pdf`
+ `application/pkcs7-mime`
+ `application/protobuf`
+ `application/rss+xml`
+ `application/truetype`
+ `application/ttf`
+ `application/vnd.apple.mpegurl`
+ `application/vnd.mapbox-vector-tile`
+ `application/vnd.ms-fontobject`
+ `application/wasm`
+ `application/xhtml+xml`
+ `application/xml`
+ `application/x-font-opentype`
+ `application/x-font-truetype`
+ `application/x-font-ttf`
+ `application/x-httpd-cgi`
+ `application/x-javascript`
+ `application/x-mpegurl`
+ `application/x-opentype`
+ `application/x-otf`
+ `application/x-perl`
+ `application/x-ttf`
+ `font/eot`
+ `font/opentype`
+ `font/otf`
+ `font/ttf`
+ `image/svg+xml`
+ `text/css`
+ `text/csv`
+ `text/html`
+ `text/javascript`
+ `text/js`
+ `text/plain`
+ `text/richtext`
+ `text/tab-separated-values`
+ `text/xml`
+ `text/x-component`
+ `text/x-java-source`
+ `text/x-script`
+ `vnd.apple.mpegurl`

## `ETag` ヘッダーの変換
<a name="compressed-content-cloudfront-etag-header"></a>

オリジンからの非圧縮オブジェクトに有効な強い `ETag` HTTP ヘッダーが含まれていて、CloudFront でそのオブジェクトを圧縮する場合、CloudFront では強い `ETag` ヘッダー値を弱い `ETag` に変換し、ビューワーに弱い `ETag` 値を返します。ビューワーは、弱い `ETag` 値を格納し、それを使用して `If-None-Match` HTTP ヘッダーで条件付きリクエストを送信できます。これにより、ビューワー、CloudFront、およびオリジンは、オブジェクトの圧縮バージョンと非圧縮バージョンを意味的に同等なものとして扱い、不要なデータ転送を減らすことができます。

有効な強い `ETag` ヘッダー値は、二重引用符 (`"`) で開始および終了します。強い `ETag` 値を弱い値に変換するために、CloudFront は強い `W/` 値の先頭に文字 `ETag` を追加します。

オリジンからのオブジェクトに弱い `ETag` ヘッダー値 (文字 `W/` で始まる値) が含まれている場合、CloudFront はこの値を変更せず、オリジンから受け取ったままビューワーに返します。

オリジンからのオブジェクトに無効な `ETag` ヘッダー値が含まれている場合 (値が `"` または `W/` で始まらない)、CloudFront は `ETag` ヘッダーを削除し、`ETag` レスポンスヘッダーなしでオブジェクトをビューワーに返します。

詳細については、MDN ウェブドキュメントの以下のページを参照してください。
+ [ディレクティブ](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag#Directives) (`ETag` HTTP ヘッダー)
+ [弱い検証](https://developer.mozilla.org/en-US/docs/Web/HTTP/Conditional_requests#Weak_validation) (HTTP 条件付きリクエスト)
+ [If-None-Match HTTP ヘッダー](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)