圧縮ファイルの供給 - Amazon CloudFront

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

圧縮ファイルの供給

ビューワー (ウェブブラウザまたはその他のクライアント) がサポートされているときに、 を使用して特定のタイプのオブジェクト (ファイル) CloudFront を自動的に圧縮し、圧縮されたオブジェクトを提供できます。ビューワーが Accept-Encoding HTTP ヘッダーを含む圧縮オブジェクトのサポートの可否を示します。

CloudFront では、Gzip および Brotli 圧縮形式を使用してオブジェクトを圧縮できます。ビューワーが両方の形式をサポートし、両方に達したキャッシュサーバーに存在する場合、 は Brotli を CloudFront 優先します。キャッシュサーバーに圧縮形式が 1 つだけ存在する場合、 はそれ CloudFront を返します。

注記

ウェブブラウザ Chrome および Firefox では、HTTPS を使用してリクエストを送信する場合のみ、Brotli 圧縮がサポートされます。これらのブラウザでは、HTTP リクエストで Brotli がサポートされません。

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

一部のカスタムオリジンでは、オブジェクトを圧縮することもできます。オリジンは、圧縮 CloudFront されないオブジェクトを圧縮できる場合があります (「」を参照 CloudFront が圧縮するファイルタイプ)。オリジンが圧縮オブジェクトを に返す場合 CloudFront、 は、オブジェクトがContent-Encodingヘッダーの存在に基づいて圧縮されていること CloudFront を検出し、オブジェクトを再度圧縮しません。

オブジェクトを圧縮 CloudFront するための の設定

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

  1. [オブジェクトを自動的に圧縮する] 設定がはいになっていることを確認します。( AWS CloudFormationまたは CloudFront API では、 Compressを に設定しますtrue。)

  2. キャッシュポリシーを使用してキャッシュ設定を指定し、GzipBrotli の設定がどちらも有効になっていることを確認します。( AWS CloudFormationまたは API で CloudFront、 EnableAcceptEncodingGzipEnableAcceptEncodingBrotliを に設定します)true

  3. キャッシュポリシーの TTL 値が 0 より大きい値に設定されていることを確認します。TTL 値をゼロに設定すると、キャッシュは無効になり、オブジェクトは圧縮 CloudFront されません。

キャッシュ動作を更新するには、次のいずれかのツールを使用できます。

CloudFront 圧縮の仕組み

オブジェクトを圧縮 CloudFront するように を設定する場合 (前のセクションを参照)、その仕組みは次のとおりです。

  1. ビューワーがオブジェクトを要求する ビューワーにより Accept-Encoding HTTP ヘッダーがリクエストに含められます。ヘッダー値には gzipbr、またはその両方が含められます。これは、ビューワーが圧縮オブジェクトをサポートすることを示します。ビューワーが Gzip と Brotli の両方をサポートしている場合、 は Brotli CloudFront を優先します。

    注記

    ウェブブラウザ Chrome および Firefox では、HTTPS を使用してリクエストを送信する場合のみ、Brotli 圧縮がサポートされます。これらのブラウザでは、HTTP リクエストで Brotli がサポートされません。

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

  3. 圧縮オブジェクトがすでにキャッシュにある場合、 CloudFront はそれをビューワーに送信し、残りのステップをスキップします。

    圧縮されたオブジェクトがキャッシュにない場合は、オリジンへのリクエストを CloudFront 転送します。

    注記

    オブジェクトの非圧縮コピーがすでにキャッシュにある場合、リクエストをオリジンに転送せずにビューワーに送信 CloudFront できます。例えば、 CloudFront これは以前に圧縮 をスキップした場合に発生する可能性があります。この場合、 は非圧縮オブジェクトを CloudFront キャッシュし、オブジェクトの有効期限が切れるか、削除されるか、または無効になるまで、引き続き提供します。

  4. オリジンが HTTP レスポンスに Content-Encodingヘッダーがあることを示す圧縮オブジェクトを返す場合、 は圧縮オブジェクトをビューワー CloudFront に送信し、キャッシュに追加して、残りの step. CloudFront doesn はオブジェクトを再度圧縮しません。

    オリジンが非圧縮オブジェクトを に返す場合 CloudFront (HTTP レスポンスにContent-Encodingヘッダーがない場合)、オブジェクトが圧縮可能かどうか CloudFront を決定します。がオブジェクトを圧縮できるかどうかを決定する方法 CloudFrontの詳細については、次のセクションを参照してください。

  5. オブジェクトが圧縮可能な場合は、 が CloudFront 圧縮してビューワーに送信し、キャッシュに追加します。(まれに、圧縮をスキップして、圧縮されていないオブジェクトをビューワーに送信する CloudFront 場合があります)。

CloudFront 圧縮に関する注意事項

次のリストでは、 がオブジェクトを CloudFront 圧縮するタイミングについて詳しく説明します。

リクエストで HTTP 1.0 が使用される

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

Accept-Encoding リクエストヘッダー

Accept-Encoding ヘッダーがビューワーリクエストにない場合、または値brとして gzipまたは が含まれていない場合、 CloudFront はレスポンスでオブジェクトを圧縮しません。Accept-Encoding ヘッダーに などの追加値が含まれている場合deflate、 はリクエストをオリジンに転送する前にそれら CloudFront を削除します。

CloudFront がオブジェクト を圧縮するように設定されている場合、キャッシュキーとオリジンリクエストに Accept-Encodingヘッダーが自動的に含まれます。

動的コンテンツ

CloudFront は、常に動的コンテンツを圧縮するとは限りません。動的コンテンツのレスポンスが圧縮される場合もあれば、圧縮されない場合もあります。

オブジェクトを圧縮 CloudFront するように を設定すると、コンテンツはすでにキャッシュされています

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

オブジェクトが圧縮されるようにオリジンがすでに設定されている

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

CloudFront 圧縮するファイルタイプ

が CloudFront 圧縮するファイルタイプの詳細なリストについては、「」を参照してください CloudFront が圧縮するファイルタイプ

CloudFront 圧縮するオブジェクトのサイズ

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

Content-Length ヘッダー

オリジンはレスポンスに Content-Lengthヘッダーを含める必要があります。この CloudFrontヘッダーは、 を使用して、オブジェクトのサイズが の圧縮範囲内にあるかどうかを判断します CloudFront。Content-Length ヘッダーが見つからない場合、無効な値が含まれている場合、または が圧縮する CloudFrontサイズ範囲外の値が含まれている CloudFront 場合、オブジェクトは圧縮されません。

レスポンスの HTTP ステータスコード

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

レスポンスに本文がない

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

ETag ヘッダー

CloudFront オブジェクトを圧縮するときに、HTTP レスポンスの ETagヘッダーが変更されることがあります。詳細については、「ETag ヘッダーの変換」を参照してください。

CloudFront 圧縮をスキップする

CloudFront は、ベストエフォートベースでオブジェクトを圧縮します。まれに、圧縮をスキップ CloudFront します。CloudFront は、ホスト容量など、さまざまな要因に基づいてこの決定を行います。がオブジェクトの圧縮を CloudFront スキップすると、圧縮されていないオブジェクトがキャッシュされ、オブジェクトの有効期限が切れるか、削除されるか、無効になるまで、ビューワーに引き続き提供されます。

CloudFront が圧縮するファイルタイプ

オブジェクトを圧縮 CloudFront するように を設定すると、 はContent-Typeレスポンスヘッダーに次のいずれかの値を持つオブジェクト CloudFront のみを圧縮します。

  • 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 ヘッダーの変換

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

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

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

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

詳細については、MDN ウェブドキュメントの以下のページを参照してください。