メニュー
Amazon CloudFront
開発者ガイド (API Version 2016-09-29)

リクエストヘッダーに基づいてオブジェクトをキャッシュするように CloudFront を設定する

ウェブディストリビューションの場合、CloudFront で、CloudFront がヘッダーをオリジンに転送し、ビューアリクエストのヘッダー値に基づいて指定のオブジェクトの別バージョンをキャッシュするかを選択できます。こうすることで、ユーザーが使っているデバイスの種類やビューアの場所、ビューアで使われている言語など、さまざまな条件に基づいてコンテンツの異なるバージョンを提供できます。RTMP ディストリビューションの場合、ヘッダー値に基づいてキャッシュするように CloudFront を設定することはできません。

ヘッダーとウェブディストリビューション

デフォルトで、CloudFront では、エッジロケーションでオブジェクトをキャッシュする際にヘッダーが考慮されません。オリジンが 2 つのオブジェクトを返し、そのリクエストヘッダーの値のみが異なる場合、CloudFront はオブジェクトの片方のみをキャッシュします。

ヘッダーをオリジンに転送するように CloudFront を設定できます。その場合、CloudFront は 1 つ以上のリクエストヘッダーの値に基づいてオブジェクトの複数のバージョンをキャッシュします。たとえば、logo.jpg のヘッダーオブジェクトがカスタム Product ヘッダーを含み、その値が Acme または Apex であるとします。Product ヘッダーの値に基づいてオブジェクトをキャッシュするように CloudFront を設定すると、CloudFront は logo.jpg に関するリクエストをオリジンに転送し、Product ヘッダーとヘッダー値を含めます。CloudFront は、Product ヘッダーの値が Acme であるリクエスト用に 1 回、値が Apex であるリクエスト用に 1 回、logo.jpg をキャッシュします。

ウェブディストリビューションの各キャッシュ動作を以下のいずれかを実行するように設定できます。

  • すべてのヘッダーをオリジンに転送する

    重要

    すべてのヘッダーをオリジンに転送するように CloudFront を設定した場合、CloudFront はこのキャッシュ動作に関連付けられたオブジェクトをキャッシュしません。その代わりに、すべてのリクエストをオリジンに送信します。

  • 指定したヘッダーのホワイトリストを転送する。CloudFront は、指定されたヘッダーすべての値に基づいてオブジェクトをキャッシュします。CloudFront は、デフォルトで転送するヘッダーも転送しますが、指定されたヘッダーの値にのみ基づいてオブジェクトをキャッシュします。

  • デフォルトのヘッダーのみを転送する。この設定の場合、CloudFront は、リクエストヘッダーの値に基づいてオブジェクトをキャッシュすることはしません。

キャッシュ動作ごとにホワイトリストに登録できるヘッダーの数に関する現在の制限については、『アマゾン ウェブ サービス全般のリファレンス』の「Amazon CloudFront の上限」を参照してください。制限の引き上げを要求するには、「https://console.aws.amazon.com/support/home#/case/create?issueType=service-limit-increase&limitType=service-code-cloudfront-distributions」を参照してください。

CloudFront コンソールを使用して、CloudFront でヘッダーをオリジンに転送するようにディストリビューションを更新する方法については、「CloudFront ディストリビューションの一覧表示、詳細表示、および更新を行う」を参照してください。CloudFront API を使用して既存のウェブディストリビューションを更新する方法については、『Amazon CloudFront API リファレンス』の「ディストリビューション設定の PUT」を参照してください。

CloudFront でキャッシュ条件にするヘッダーを選択する

オリジンに転送できるヘッダーおよび、CloudFront がキャッシュ条件にするヘッダーは、Amazon S3 バケットを使用しているか、それともカスタムオリジンを使用しているかに応じて変わります。

  • Amazon S3 – Access-Control-Request-HeadersAccess-Control-Request-Method、および Origin の 3 つのヘッダーのみに基づいてオブジェクトを転送およびキャッシュするように CloudFront を設定できます。これらのヘッダーを転送することによって、CloudFront は Cross-Origin Resource Sharing(CORS)が有効になっているウェブサイトのコンテンツを配信できます。カスタムヘッダーを Amazon S3 に転送するように CloudFront を設定することはできません。詳細については、「Cross-Origin Resource Sharing (CORS) 設定を優先するように CloudFront を設定する」を参照してください。

  • カスタムオリジン – 以下を除く任意のリクエストヘッダーの値に基づいてキャッシュするように CloudFront を設定できます。

    Date および User-Agent ヘッダーの値に基づいてオブジェクトをキャッシュするように CloudFront を設定できますが、これはお勧めできません。これらのヘッダーには可能な値が多数あり、その値に基づいてキャッシュすると、CloudFront がオリジンに転送するリクエストの数が大幅に増加します。

すべての HTTP リクエストヘッダーの一覧と、CloudFront がそれを処理する方法については、以下の該当するトピックを参照してください。

Cross-Origin Resource Sharing (CORS) 設定を優先するように CloudFront を設定する

Cross-Origin Resource Sharing(CORS)を Amazon S3 バケットまたはカスタムオリジンで有効にしている場合、その CORS 設定を尊重するように CloudFront を設定できます。ヘッダーのホワイトリストを転送し、転送するヘッダーのリストに適切なヘッダーを含めるように、CloudFront を設定します。適切なヘッダーは、Amazon S3 オリジンを使用しているかカスタムオリジンを使用しているかによって異なります。

Amazon S3

  • OPTIONS 応答をキャッシュする場合は、OriginAccess-Control-Request-HeadersAccess-Control-Request-Method の各ヘッダーを転送するように CloudFront を設定します。

  • OPTIONS 応答をキャッシュしない場合は、Origin のヘッダーを転送するように CloudFront を設定します。また、Access-Control-Request-Headers および Access-Control-Request-Method の各ヘッダーを転送するように CloudFront を設定することもできますが、必要ではありません。

カスタムオリジン – オリジンが必要とする他のヘッダーと共に、Origin ヘッダーを転送します。

CORS と Amazon S3 の詳細については、『Amazon Simple Storage Service 開発者ガイド』の「Cross-Origin Resource Sharing の有効化」を参照してください。

デバイスタイプに基づいてオブジェクトをキャッシュするように CloudFront を設定する

ユーザーがコンテンツの表示に使用しているデバイスに基づいて、オブジェクトの異なるバージョンを CloudFront でキャッシュするには、該当するヘッダーをカスタムオリジンに転送するように CloudFront を設定します。

  • CloudFront-Is-Desktop-Viewer

  • CloudFront-Is-Mobile-Viewer

  • CloudFront-Is-SmartTV-Viewer

  • CloudFront-Is-Tablet-Viewer

CloudFront は、User-Agent ヘッダーの値に基づいて、これらのヘッダーの値を true または false に設定した後、リクエストをオリジンに転送します。デバイスが複数のカテゴリに属する場合は、複数の値が true になることがあります。たとえば、あるタブレットデバイスについて、CloudFront が CloudFront-Is-Mobile-ViewerCloudFront-Is-Tablet-Viewer の両方を true に設定する場合があります。

ビューアの言語に基づいてオブジェクトをキャッシュするように CloudFront を設定する

リクエストで指定された言語に基づいて、オブジェクトの異なるバージョンを CloudFront でキャッシュするには、Accept-Language ヘッダーにその言語を含めるようにアプリケーションをプログラミングし、Accept-Language ヘッダーをオリジンに転送するように CloudFront を設定します。

ビューアの場所に基づいてオブジェクトをキャッシュするように CloudFront を設定する

リクエストの要求元の国に基づいて、オブジェクトの異なるバージョンを CloudFront でキャッシュするには、CloudFront-Viewer-Country ヘッダーをオリジンに転送するように CloudFront を設定します。CloudFront はリクエストの要求元の IP アドレスを 2 文字の国コードに自動的に変換します。コード順、国順に並べ替えることのできる使いやすい国コードの一覧については、Wikipedia の「ISO 3166-1 alpha-2」の項目を参照してください。

リクエストのプロトコルに基づいてオブジェクトをキャッシュするように CloudFront を設定する

リクエストのプロトコル(HTTP または HTTPS)に基づいて、オブジェクトの異なるバージョンを CloudFront でキャッシュするには、CloudFront-Forwarded-Proto ヘッダーをオリジンに転送するように CloudFront を設定します。

ヘッダーに基づくキャッシュがパフォーマンスに及ぼす影響

ヘッダーに基づいてキャッシュするように CloudFront を設定した場合、ヘッダーで指定できる値が複数あると、CloudFront が同じオブジェクトについてオリジンサーバーに転送するリクエストの数が増えます。このためパフォーマンスが低下し、オリジンサーバーの負荷が増加します。所定のヘッダーの値に関係なくオリジンサーバーが同じオブジェクトを返す場合は、そのヘッダーに基づいてキャッシュするように CloudFront を設定しないことをお勧めします。

複数のヘッダーを転送するように CloudFront を設定した場合、ビューアリクエストのヘッダーの順序は、値が同じである限り、キャッシュ動作には影響しません。たとえば、あるリクエストのヘッダーが A:1、B:2 で、別のリクエストのヘッダーが B:2、A:1 である場合、CloudFront はそのオブジェクトのコピーを 1 つだけキャッシュします。

ヘッダーとヘッダー値の大文字小文字がキャッシュに及ぼす影響

CloudFront がヘッダー値に基づいてキャッシュする場合、ヘッダー名の大文字小文字の違いは無視されますが、ヘッダー値の大文字小文字の違いは考慮されます。

  • ビューアリクエストが Product:Acmeproduct:Acme の両方を含む場合、CloudFront がオブジェクトをキャッシュするのは 1 回だけです。両者の違いはヘッダー名の大文字小文字だけで、これはキャッシュ動作に影響しません。

  • ビューアリクエストが Product:AcmeProduct:acme の両方を含む場合、CloudFront はオブジェクトを 2 回キャッシュします。値が、あるリクエストでは Acme、別のリクエストでは acme と異なっているためです。

CloudFront がビューアに返すヘッダー

ヘッダーを転送しキャッシュするように CloudFront を設定しても、CloudFront がビューアに返すヘッダーは影響を受けません。CloudFront は、いくつかの例外を除いて、オリジンから取得したヘッダーをすべて返します。詳細については、該当するトピックを参照してください。

ヘッダーと RTMP ディストリビューション

RTMP ディストリビューションの場合、ビューアリクエストのヘッダーに基づいてコンテンツをキャッシュするように CloudFront を設定できます。