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

Cookie に基づいてオブジェクトをキャッシュするように CloudFront を設定する

ウェブディストリビューションの場合、CloudFront で Cookie をオリジンに転送し、ビューアリクエストの Cookie 値に基づいてオブジェクトの別バージョンをキャッシュするかどうかを選択できます。

リアルタイムメッセージングプロトコル (RTMP) ディストリビューションの場合、Cookie を処理するように CloudFront を設定することはできません。CloudFront は、オリジンサーバーからのオブジェクトを要求する場合、すべての Cookie を削除してからリクエストをオリジンに転送します。オリジンがオブジェクトとともに何らかの Cookie を返した場合、CloudFront は、オブジェクトをビューアに返す前にその Cookie を削除します。RTMP ディストリビューションでは、CloudFront は Cookie をエッジキャッシュにキャッシュしません。

重要

Amazon S3 および一部の HTTP サーバーは Cookie を処理しません。Cookie を処理しないオリジンに Cookie を転送するように CloudFront キャッシュ動作を構成しないでください。キャッシュ可能性が低下します。つまり、パフォーマンスが低下します。キャッシュ動作の詳細については、「キャッシュ動作の設定」を参照してください。

HTTP および HTTPS のウェブディストリビューションでは、CloudFront で Cookie をオリジンに転送するかどうかを選択できます。RTMP ディストリビューションでは、Cookie を処理するように CloudFront を構成することはできません。

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

ビューアリクエストの一部またはすべての 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 回、このオブジェクトをキャッシュします。

注記

オリジンに Cookie を転送するように CloudFront を設定した場合、CloudFront は Cookie の値に基づいてキャッシュします。これは、オリジンがリクエスト内の Cookie 値を無視し、(前の例で)同じバージョンの locations.html を CloudFront に常に返す場合にも当てはまります。結果として、同じオブジェクトのリクエストを CloudFront がオリジンサーバーに転送する回数が多くなり、パフォーマンスが低下し、オリジンサーバーの負荷が高くなります。特定の Cookie の値に基づいてオリジンサーバーの応答が変わることがない場合は、その Cookie がオリジンに転送されるように CloudFront を設定しないことをお勧めします。

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

  • すべての Cookie をオリジンに転送 – CloudFront は、すべての Cookie を含めて、ビューアリクエストをオリジンに転送します。オリジンが応答を返すと、CloudFront は応答と、ビューアリクエスト内の Cookie および Cookie 値をキャッシュします(ビューアリクエストにない Cookie がオリジンから返された場合、CloudFront はこれらをキャッシュしません)。CloudFront は、リクエストされたオブジェクト、ビューアリクエストになかった Cookie も含めたすべての Cookie および Cookie 値をビューアに返します。

  • 指定した Cookie のホワイトリストを転送 – CloudFront は、リクエストをオリジンに転送する前に、ホワイトリストにないすべての Cookie を削除します。CloudFront は、オリジンからの応答と共に、指定された Cookie およびその値もキャッシュします(オリジンがホワイトリストに登録された Cookie と登録されていない Cookie の両方を返した場合、CloudFront はホワイトリストに登録された Cookie のみをキャッシュします)。また、CloudFront は、指定された Cookie と Cookie 値を含めて、オブジェクトをビューアに返します。ホワイトリストにない Cookie がオリジンからの応答に含まれている場合、CloudFront はその Cookie もビューアに返します。

    Cookie 名でワイルドカードを指定する方法の詳細については、「ホワイトリスト Cookie(Amazon EC2 および他のカスタムオリジンのみ)」を参照してください。

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

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

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

アクセスログ

Cookie をオリジンに転送しないように CloudFront を設定した場合や、指定された Cookie のリストのみを転送するように CloudFront を設定した場合でも、リクエストと Cookie をログに記録するように CloudFront を設定すると、CloudFront ではすべての Cookie とすべての Cookie 属性がログに記録されます。CloudFront ログ作成の詳細については、「アクセスログ」を参照してください。

大文字と小文字の区別

Cookie 名と値は、大文字と小文字を区別します。たとえば、同じオブジェクトに対する 2 つの Cookie があり、それらの名前が、大文字小文字が異なる以外は同一の場合、CloudFront はそのオブジェクトを 2 回キャッシュします。

CloudFront は Cookie をソートする

CloudFront は、リクエストをオリジンに転送する前に、Cookie 名の自然な順序で Cookie を並べ替えます。

If-Modified-Since と If-None-Match

If-Modified-Since および If-None-Match の条件付きリクエストはサポートされません。

Cookie に基づくキャッシュの一時停止

CloudFront で Cookie と Cookie 属性のキャッシュを一時的に停止するには、CloudFront への応答に以下のヘッダーを追加するようにオリジンサーバーを設定します。

no-cache="Set-Cookie"

Cookie 名の全体の長さ

CloudFront がオリジンに転送するように設定するすべての Cookie 名の合計バイト数は、次の値を超えてはなりません。

512 – (the number of cookies that you're forwarding)

たとえば、CloudFront が 10 個の Cookie をオリジンに転送するように設定する場合、10 個の Cookie 名の合計の長さは 502 バイト(512 - 10)を超えてはなりません。CloudFront がすべての Cookie をオリジンに転送するように設定する場合、Cookie 名の長さを考慮する必要はありません。

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