翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
クエリ文字列パラメータに基づくコンテンツのキャッシュ
ウェブアプリケーションによっては、クエリ文字列を使用してオリジンに情報を送信します。クエリ文字列はウェブリクエストの一部で、?
文字の後に追加されます。この文字列には &
文字で区切られたパラメータを 1 つ以上含めることができます。次の例では、クエリ文字列には 2 つのパラメータ (color=red
と size=large
) が含まれています。
https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red&size=large
ディストリビューションでは、クエリ文字列 CloudFront をオリジンに転送するか、すべてのパラメータまたは選択したパラメータに基づいてコンテンツをキャッシュするかを選択できます。これが役立つ場合があるのはなぜですか。次の の例を考えます。
たとえば、ウェブサイトが 5 種類の言語で使用でき、ディレクトリ構造とファイル名はウェブサイトの 5 つのバージョンすべてで共通だとします。ユーザーがウェブサイトを表示すると、ユーザーが選択した言語に基づいて言語クエリ文字列パラメータ CloudFront を含めるように転送されるリクエスト。クエリ文字列 CloudFront をオリジンに転送し、言語パラメータに基づいてキャッシュするように を設定できます。選択された言語に対応する特定バージョンのページを返すようウェブサーバーを設定した場合、 CloudFront は、それぞれの言語によるクエリ文字列パラメータに基づく各言語のバージョンを個別にキャッシュします。
この例では、ウェブサイトのメインページが の場合main.html
、次の 5 つのリクエストにより、言語クエリ文字列パラメータの値ごとに 1 回、 が main.html
5 回 CloudFront キャッシュされます。
-
https://d111111abcdef8.cloudfront.net/main.html?
language=de
-
https://d111111abcdef8.cloudfront.net/main.html?
language=en
-
https://d111111abcdef8.cloudfront.net/main.html?
language=es
-
https://d111111abcdef8.cloudfront.net/main.html?
language=fr
-
https://d111111abcdef8.cloudfront.net/main.html?
language=jp
次の点に注意してください。
-
一部の HTTP サーバーはクエリ文字列パラメータを処理しません。このため、パラメータ値に基づくオブジェクトの別バージョンを返しません。これらのオリジンでは、クエリ文字列パラメータをオリジンに転送 CloudFront するように を設定すると、オリジンがすべてのパラメータ値 CloudFront に対して同じバージョンのオブジェクトを に返した場合でも、パラメータ値に基づいてキャッシュが CloudFront 分離されます。
-
上記の例で説明したようにクエリ文字列パラメータを言語で使用するには、クエリ文字列パラメータ間の区切り文字として
&
文字を使用する必要があります。別の区切り記号を使用すると、 CloudFront がキャッシュのベースとして使用するように指定したパラメータと、パラメータがクエリ文字列に表示される順序によっては、予期しない結果が発生する可能性があります。次の例は、別の区切り文字を使用し、
color
パラメータのみに基づいてキャッシュ CloudFront するように を設定した場合の動作を示しています。-
次のリクエストでは、 は
color
パラメータの値に基づいてコンテンツを CloudFront キャッシュしますが、値はred、size=large
と CloudFront 解釈します。https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red;size=large
-
次のリクエストでは、 はコンテンツを CloudFront キャッシュしますが、クエリ文字列パラメータに基づくキャッシュは行いません。これは、
color
パラメータに基づいてキャッシュ CloudFront するように を設定しましたが、次の文字列を large の値を持つsize
パラメータのみを含むものとして CloudFront 解釈するためです。 color=red 。https://d111111abcdef8.cloudfront.net/images/image.jpg?
size=large;color=red
-
次のいずれかを実行する CloudFront ように を設定できます。
-
クエリ文字列をオリジンにまったく転送しない。クエリ文字列を転送しない場合、CloudFront はクエリ文字列パラメータに基づくキャッシュを実行しません。
-
クエリ文字列をオリジンに転送し、クエリ文字列内のすべてのパラメータに基づいてキャッシュする。
-
クエリ文字列をオリジンに転送し、クエリ文字列内の指定したパラメータに基づいてキャッシュする。
詳細については、「キャッシュの最適化」を参照してください。
クエリ文字列の転送とキャッシュのためのコンソールおよび API の設定
CloudFront コンソールでクエリ文字列の転送とキャッシュを設定するには、 で次の設定を参照してくださいディストリビューションを作成または更新する場合に指定する値。
CloudFront API を使用してクエリ文字列の転送とキャッシュを設定するには、「Amazon CloudFront API リファレンス」のDistributionConfig「」とDistributionConfigWithTags「」の次の設定を参照してください。
-
QueryString
-
QueryStringCacheKeys
キャッシュの最適化
クエリ文字列パラメータに基づいてキャッシュ CloudFront するように を設定する場合、次の手順を実行して、 がオリジン CloudFront に転送するリクエストの数を減らすことができます。 CloudFront エッジロケーションがオブジェクトを提供する場合、オブジェクトはユーザーに近い場所から提供されるため、オリジンサーバーの負荷が軽減され、レイテンシーが短縮されます。
- オリジンが返すオブジェクトのバージョンが変わるパラメータだけに基づいてキャッシュする
-
ウェブアプリケーションが に転送するクエリ文字列パラメータごとに CloudFront、 CloudFront はパラメータ値ごとにリクエストをオリジンに転送し、パラメータ値ごとにオブジェクトの個別のバージョンをキャッシュします。これは、オリジンがパラメータの値に関係なく常に同じオブジェクトを返す場合も当てはまります。パラメータが複数ある場合、リクエスト数とオブジェクトの数は乗算されます。たとえば、あるオブジェクトのリクエストにパラメータが 2 つ含まれていて、それぞれのパラメータに異なる値が 3 つある場合、 CloudFront がキャッシュするオブジェクトのバージョンは 6 種類になります。この場合、このセクションの別の推奨事項を参照することをお勧めします。
オリジンが返すバージョンが異なるクエリ文字列パラメータのみに基づいてキャッシュ CloudFront するように を設定し、各パラメータに基づいてキャッシュする利点を慎重に検討することをお勧めします。たとえば、ある通販ウェブサイトを運営していて、ジャケットの写真が色違いで 6 つあり、ジャケットのサイズは 10 種類だとします。また、ジャケットの写真は色違いだけが表示され、サイズ違いの分までは表示されていないものとします。キャッシュを最適化するには、サイズパラメータではなく色パラメータのみに基づいてキャッシュ CloudFront するように を設定する必要があります。これにより、 がキャッシュからのリクエストを処理 CloudFront できる可能性が高くなり、パフォーマンスが向上し、オリジンの負荷が軽減されます。
- パラメータの順序を常に統一する
-
クエリ文字列では、パラメータの順序が重要になります。次の例は、パラメータの順序だけが異なる同じクエリ文字列です。これにより、 CloudFront は image.jpg に対する 2 つの異なるリクエストをオリジンに転送し、2 つの異なるバージョンのオブジェクトをキャッシュします。
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red&size=large
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?
size=large&color=red
このため、パラメータ名は、常に同じ順序 (アルファベット順など) にすることをお勧めします。
-
- パラメータ名とパラメータ値の大文字と小文字を常に統一する
-
CloudFront は、クエリ文字列パラメータに基づいてキャッシュするときに、パラメータ名と値の大文字と小文字を考慮します。次の例は、パラメータ名とパラメータ値の大文字と小文字だけが異なる、同じクエリ文字列です。これにより、 CloudFront は image.jpg に対する 4 つの異なるリクエストをオリジンに転送し、4 つの異なるバージョンのオブジェクトをキャッシュします。
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=red
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?
color=Red
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?
Color=red
-
https://d111111abcdef8.cloudfront.net/images/image.jpg?
Color=Red
このため、パラメータ名とパラメータ値の大文字と小文字を統一する (すべて小文字など) ことをお勧めします。
-
- 署名付き URL と競合するパラメータ名を使わない
-
署名URLs を使用してコンテンツへのアクセスを制限している場合 (信頼された署名者をディストリビューションに追加した場合)、残りの URL をオリジンに転送する前に、次のクエリ文字列パラメータ CloudFront を削除します。
-
Expires
-
Key-Pair-Id
-
Policy
-
Signature
署名URLs を使用していて、クエリ文字列をオリジンに転送 CloudFront するように を設定する場合、独自のクエリ文字列パラメータに
Expires
、Key-Pair-Id
、Policy
、または という名前を付けることはできませんSignature
。 -
クエリ文字列パラメータと CloudFront 標準ログ (アクセスログ)
ログ記録を有効にすると、 はクエリ文字列パラメータを含む完全な URL CloudFront を記録します。これは、クエリ文字列をオリジンに転送 CloudFront するように を設定しているかどうかに関係なく当てはまります。 CloudFront ログ記録の詳細については、「」を参照してください標準ログ (アクセスログ) の設定および使用。