Cookie に基づくコンテンツのキャッシュ - Amazon CloudFront

Cookie に基づくコンテンツのキャッシュ

デフォルトでは、CloudFront はリクエストとレスポンスを処理するとき、またはオブジェクトをエッジロケーションにキャッシュするときに Cookie を考慮しません。CloudFront が Cookie ヘッダーに含まれる内容以外は同一の 2 つのリクエストを受信した場合、デフォルトでは、CloudFront はリクエストを同一として扱い、両方のリクエストに対して同じオブジェクトを返します。

CloudFront でビューワーリクエストの一部またはすべて Cookie をオリジンに転送し、転送される Cookie 値に基づいてオブジェクトの別バージョンをキャッシュするように設定できます。これを行うと、CloudFront は、ビューワーリクエスト内の Cookie の一部またはすべて (転送するように設定されているものすべて) を使用して、キャッシュ内のオブジェクトを一意に識別します (RTMP ディストリビューションでは、Cookie を処理するように CloudFront を設定することはできません。CloudFront は Cookie をエッジキャッシュに入れません)。

たとえば、locations.html に対するリクエストに country Cookie が含まれており、その値が uk または fr であるとします。country Cookie の値に基づいてオブジェクトをキャッシュするように CloudFront を設定すると、CloudFront は locations.html に関するリクエストをオリジンに転送し、country Cookie とその値を含めます。オリジンは locations.html を返し、CloudFront は country Cookie の値が uk であるリクエスト用に 1 回、値が fr であるリクエスト用に 1 回、このオブジェクトをキャッシュします。

重要

Amazon S3 および一部の HTTP サーバーは Cookie を処理しません。Cookie を処理しないオリジンや、Cookie に基づいてレスポンスを変化させないオリジンに Cookie を転送するように CloudFront を設定しないでください。これにより、CloudFront によって同じオブジェクトのオリジンに多くのリクエストが転送されるため、パフォーマンスが低下し、オリジンの負荷が増加する可能性があります。前の例を考慮すると、オリジンが country Cookie を処理しない場合や、country Cookie の値に関係なく同じバージョンの locations.html を CloudFront に返す場合は、その Cookie を転送するように CloudFront を設定しないでください。

逆に、カスタムオリジンが特定の Cookie に依存しているか、Cookie に基づいて異なるレスポンスを送信する場合は、その Cookie をオリジンに転送するように CloudFront を設定してください。そのように設定しない場合、CloudFront はリクエストをオリジンに転送する前に Cookie を削除します。

Cookie 転送を設定するには、ディストリビューションのキャッシュ動作を更新します。キャッシュ動作の詳細については、「キャッシュ動作の設定」の、特に「Cookie の転送」および「ホワイトリスト Cookie」セクションを参照してください。

各キャッシュ動作を設定して、次のいずれかを実行できます。

  • オリジンにすべての Cookie を転送する - CloudFront には、リクエストをオリジンに転送するときにビューワーが送信するすべての Cookie が含まれます。オリジンがレスポンスを返すと、CloudFront はビューワーリクエスト内の Cookie の名前と値を使用してレスポンスをキャッシュします。オリジンレスポンスに Set-Cookie ヘッダーが含まれている場合、CloudFront はリクエストされたオブジェクトと共にそれらのヘッダーをビューワーに返します。CloudFront は、オリジンから返されたオブジェクトと共に Set-Cookie ヘッダーもキャッシュし、すべてのキャッシュヒットでそれらの Set-Cookie ヘッダーをビューワーに送信します。

  • 指定した Cookie のホワイトリストを転送する - CloudFront は、リクエストをオリジンに転送する前に、ホワイトリストにないビューワーが送信する Cookie をすべて削除します。CloudFront は、ビューワーリクエストのホワイトリストに登録された Cookie の名前と値を使用してレスポンスをキャッシュします。オリジンレスポンスに Set-Cookie ヘッダーが含まれている場合、CloudFront はリクエストされたオブジェクトと共にそれらのヘッダーをビューワーに返します。CloudFront は、オリジンから返されたオブジェクトと共に Set-Cookie ヘッダーもキャッシュし、すべてのキャッシュヒットでそれらの Set-Cookie ヘッダーをビューワーに送信します。

    ホワイトリストの Cookie 名でワイルドカードを指定する方法の詳細については、「ホワイトリスト Cookie」を参照してください。

    キャッシュ動作ごとにホワイトリストに登録できる Cookie 名の数に関する現在のクォータについて、またはクォータの引き上げをリクエストするには、「ホワイトリスト登録済みクエリ文字列のクォータ (ウェブディストリビューションのみ)」を参照してください。

  • Cookie をオリジンに転送しない - CloudFront は、ビューワーによって送信された Cookie 値に基づくオブジェクトのキャッシュを行いません。さらに、CloudFront はリクエストをオリジンに転送する前に Cookie を削除し、レスポンスをビューワーに返す前にレスポンスから Set-Cookie ヘッダーを削除します。

転送する Cookie を指定するときには、以下に注意してください。

アクセスログ

Cookie をオリジンに転送しないように CloudFront を設定した場合や、特定の Cookie のホワイトリストのみを転送するように CloudFront を設定した場合でも、リクエストと Cookie をログに記録するように CloudFront を設定すると、CloudFront ではすべての Cookie とすべての Cookie 属性がログに記録されます。CloudFront ログ記録の詳細については、「標準ログ (アクセスログ) の設定および使用」を参照してください。

大文字と小文字の区別

Cookie の名前と値は、大文字と小文字を区別します。例えば、CloudFront がすべての Cookie を転送するように設定されていて、同じオブジェクトに対する 2 つのビューワーリクエストに、大文字/小文字を除いて同一の Cookie がある場合、CloudFront はオブジェクトを 2 回キャッシュします。

CloudFront による Cookie の並べ替え

CloudFront が Cookie (すべてまたはホワイトリスト) を転送するように設定されている場合、CloudFront はリクエストをオリジンに転送する前に、Cookie 名の自然な順序で Cookie を並べ替えます。

If-Modified-Since と If-None-Match

If-Modified-SinceIf-None-Match の条件付きリクエストは、CloudFront が Cookie (すべてまたはホワイトリスト) を転送するように設定されている場合はサポートされません。

標準の名前と値のペア形式が必要

CloudFront は、値が標準の名前と値のペア形式 ("Cookie: cookie1=value1; cookie2=value2" など) に準拠している場合のみ、Cookie ヘッダーを転送します。

Set-Cookie ヘッダーのキャッシュの無効化

CloudFront が Cookie をオリジン (すべてまたはホワイトリスト) に転送するように設定されている場合、オリジンレスポンスで受信した Set-Cookie ヘッダーもキャッシュします。CloudFront は、元のビューワーへのレスポンスにこれらの Set-Cookie ヘッダーを含め、CloudFront キャッシュから提供される後続のレスポンスにも含めます。

オリジンで Cookie を受信するが、CloudFront がオリジンのレスポンスで Set-Cookie ヘッダーをキャッシュしないようにする場合、フィールド名として Set-Cookie を指定する no-cache ディレクティブを含む Cache-Control ヘッダーを追加するようにオリジンを設定します。例: Cache-Control: no-cache="Set-Cookie"。詳細については、「Hypertext Transfer Protocol (HTTP/1.1): Caching」標準の「Response Cache-Control Directives」を参照してください。

Cookie 名の全体の長さ

特定の Cookie のホワイトリストをオリジンに転送するように CloudFront を設定した場合、転送するように CloudFront を設定するすべての Cookie 名の合計バイト数は、512 から転送する Cookie の数を引いた値を超えることはできません。例えば、10 個の Cookie をオリジンに転送するように CloudFront を設定する場合は、10 個の Cookie 名の合計の長さが 502 バイト (512 - 10) を超えないようにしてください。

すべての Cookie をオリジンに転送するように CloudFront を設定する場合は、Cookie 名の長さを考慮する必要はありません。

CloudFront コンソールを使用して、CloudFront で Cookie をオリジンに転送するようにディストリビューションを更新する方法については、「ディストリビューションの更新」を参照してください。CloudFront API を使用してディストリビューションを更新する方法については、Amazon CloudFront API リファレンスの「UpdateDistribution」を参照してください。