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 と Cookie 値を含めます。オリジンは locations.html を返し、CloudFront は country Cookie の値が uk であるリクエスト用に 1 回、値が fr であるリクエスト用に 1 回、このオブジェクトをキャッシュします。

重要

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

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

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

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

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

  • 指定した Cookie のホワイトリストを転送する – CloudFront は、ビューワーが送信した Cookie のうち、リクエストをオリジンに転送する前にホワイトリストに含まれていない 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 (すべてまたはホワイトリスト9 を転送するように設定されている場合はサポートされません。

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

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

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

Cookie をオリジン (すべてまたはホワイトリスト) に転送するように CloudFront が設定されている場合、オリジンレスポンスで受信した 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 の数を引いた値を超えることはできません。たとえば、CloudFront が 10 個の Cookie をオリジンに転送するように設定する場合、10 個の Cookie 名の合計の長さは 502 バイト (512-10) を超えてはなりません。

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

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