Cache While Ignoring Query Strings

最終更新日:2024-07-01 12:06:55

ユーザーがウェブサイトのコンテンツをリクエストする際に、ロジックを実現するためにURLに特別なパラメータをクエスチョンマークの後に含めることがあります。例えば、http://domain/1.jpg?version=1 です。デフォルトでは、CDNetworks CDNプラットフォームはCDNサーバーで全URLリクエストをキャッシュします。つまり、クエスチョンマークの後に異なるパラメータ値があると、複数のキャッシュされたコンテンツのコピーが生成されます。ユーザーがリクエストしたURLは、CDNサーバーでキャッシュされたURLと完全に一致する必要があります。

クエスチョンマークの後に多くのパラメータがあると、CDNサーバーでキャッシュされたファイルの数が増加し、キャッシュヒット率が低下する可能性があります。これにより、オリジンサーバーへのリクエストが増加し、ユーザーリクエストの応答遅延が増し、最終的にはユーザーエクスペリエンスとオリジンサーバーの負荷、および運用コストに影響を与える可能性があります。

ユーザーが同じパスを持つがクエスチョンマークの後のパラメータが異なるURLを使用してコンテンツをリクエストし、ウェブサイトがユーザーに同じファイルを返す場合、キャッシュ目的でクエスチョンマークの後のパラメータを無視するようにCDNプラットフォームを設定することをお勧めします。これにより、CDNサーバーでのキャッシュヒット率が向上し、ユーザーエクスペリエンスが向上し、オリジンサーバーの負荷とコストが削減されます。

クエリストリングを無視してキャッシュを構成する方法

  1. CDNetworksコンソール にログインし、適切な製品を選択します。
  2. Configuration に移動し、設定したいドメインを見つけ、上部の Edit Configuration またはドメイン右側の Edit ボタンをクリックします Self-Service Configuration for China Premium Service Onboarding
  3. 設定変更ページに入り、Cache Optimization の下の Ignore-Query-String Caching を見つけ、Add ボタンをクリックします。
  4. ルール編集ページで、次の設定オプションを必要に応じて追加できます。

Effective Range
CDNetworks CDNプラットフォームは、Effective Rangeに対して次のオプションを提供し、ルールが適用されるリクエストを指定できます。

パラメータ 説明
すべてのリクエスト 関連するドメインに対して開始されたすべてのリクエストがこのルールに適用されることを示します。
指定されたファイルタイプ このルールは指定されたファイルタイプのリクエストに適用されます。リストされたものから選択するか、このフィールドでファイルタイプをカスタマイズできます。複数のファイルタイプを ; で区切ります。例: ace;aac.
指定されたURI 特定のURIリクエストに対してルールを設定できます。ルールごとに指定されたURIは1つのみ設定できます。
入力するURIには http:// または https:// を含めず、URI部分のみを設定します。例: 完全なURLが https://domain/browse/index.html の場合、/browse/index.html のみを設定し、特に ? を含めることはできません。
指定されたディレクトリ このルールは指定されたディレクトリに向けられたすべてのリクエストに適用されます。ディレクトリは / で始まり / で終わる必要があり、文字、数字、および特定の特殊記号(アンダースコア、ハイフン、パーセント記号、ドット)で構成されます。例: /file/1%1/http://domain/file/1%1/ ディレクトリおよびその中のすべてのファイルに対してルールが適用されることを示します。
複数のディレクトリは改行で区切る必要があります。
URL正規表現 正規表現を直接入力することも選択できます。/ で始める必要はありません。プラットフォームは自動的にURLの前に ^https?://[^/]/ を追加します。例: .*.jpg$ は、このルールに関連するすべてのドメインのJPGファイルのリクエストがこのポリシーに一致することを示します。

Effective Rangeを構成した後、URLのクエリストリングがCDNサーバーのキャッシュおよび応答基準の一部であるかどうかを構成できます。CDNetworks CDNプラットフォームは次の3つのオプションを提供します:

  • すべてのクエリストリングを無視する - クエリストリングパラメータなしでキャッシュする

    このオプションは、リクエストURLのクエリストリングを無視します。クエスチョンマークの後のパラメータが異なっても、CDNサーバーはクエスチョンマークの前のURLのみをキャッシュします。ユーザーがリクエストしたURLのクエスチョンマークの後の異なるパラメータは、CDNサーバーで同じキャッシュファイルにヒットします;

    さらに、CDNサーバーにキャッシュファイルがなく、オリジンサーバーからコンテンツをフェッチする必要がある場合に、クエリストリングを無視するかどうかを構成することもできます。CDNサーバーへのユーザーリクエストの前の設定と同様に、ここでYesを選択すると、CDNサーバーからオリジンサーバーへのリクエストURLはクエリストリングを無視します。反対に、Noを選択すると、CDNサーバーはクエリストリングを含むリクエストをオリジンサーバーに送信します。


  • すべてのクエリストリングを保持する - すべてのクエリストリングパラメータでキャッシュする

    このオプションは、リクエストURLのクエリストリングを無視しません。すべてのクエリストリングパラメータを含むURL全体がCDNのキャッシュ基準として使用されます。URLのクエリストリングの任意のパラメータ値が変更されると、CDNサーバーは別のファイルをキャッシュします。異なるクエリストリングパラメータを持つユーザーリクエストは、CDNサーバーで異なるキャッシュファイルにヒットします。CDNサーバーがオリジンサーバーからファイルをフェッチする必要がある場合、リクエストURLのすべてのクエリストリングパラメータを保持します。


  • 一部のクエリストリングを保持する - 選択されたクエリストリングパラメータでキャッシュする

    前のオプションと同様に、キャッシュおよびユーザーリクエストに応答する際にリクエストURLのクエリストリングを無視しません。ただし、クエリストリングのどのパラメータをキャッシュおよび応答基準として使用するかをカスタマイズできます。指定されたパラメータの値が異なる場合にのみ、CDNサーバーは別のキャッシュオブジェクトを持ち、それに応じたキャッシュエンティティで特定のユーザーリクエストに応答します。

    Keep Some Query Stringを選択し、いくつかのクエリストリングパラメータをキャッシュ基準として使用するか、Delete Some Query Stringを選択し、一部のパラメータを除外して他のもののみキャッシュ基準として保持します。複数のパラメータを定義でき、セミコロンで区切ります。例:name;year.

    さらに、オリジンサーバーからコンテンツをフェッチする際のリクエストURLにクエリストリングパラメータを保持するかどうかを定義することもできます。Keep All Query String一部のクエリストリングを保持する、またはKeep Some Query StringBack-to-Origin Parater Settingフィールドに含めます。これらのオプションの意味は前述したものと一致します。Delete Some Query Stringを構成する際に-を入力すると、オリジンサーバーへのリクエストURLにはパラメータが含まれません。複数のパラメータを定義でき、セミコロンで区切ります。


Ignore Case Sensitivity
このフィールドでYesを選択すると、Effective Rangeで定義されたルールに対して大文字小文字の区別を無視します。つまり、Effective Rangeで定義されたフィールドの文字の大文字小文字のみが異なる2つのリクエストURLが同じルールに一致します。例えば、http://domain/a.jpg?version=1をキャッシュのためにクエリストリングを無視するように構成した場合、http://domain/A.jpg?version=1も有効になります。
反対に、Noを選択した場合、Effective Rangeでの大文字小文字の区別は無視されず、Effective Range構成で設定した条件に従って厳密に一致するユーザーリクエストのみがCDNエッジサーバーにキャッシュされます。
このフィールドのデフォルト値ははいです。

Priority
Priorityフィールドでは、このルールの優先順位レベルを指定できます。ユーザーのリクエストに基づいて、システムは設定したルールを照合します。複数のルールが適用される場合、優先順位が高いルールが最初に適用されます。


設定を完了したら、OKをクリックし、次に次へを選択して設定を送信してください。本番環境に影響を与える可能性を最小限に抑えるため、ステージング環境でのPre-deployテストを強く推奨します。この重要なステップにより、設定がライブ環境に適用される前に正確性を確認できます。設定の正確性を確認したら、Deploy Nowをクリックしてライブ環境に実装します。設定は通常3〜5分以内に有効になります。事前デプロイテストの詳細および設定の有効性を確認するための包括的なガイダンスについては、チュートリアル構成をステージング環境にデプロイして検証するを参照してください。


ベストプラクティス

例1:クエリストリングの無視 - クエリストリングを無視してキャッシュし、オリジンからフェッチする際にクエリストリングを無視
以下のルール構成では、URLのクエリストリングパラメータはキャッシュ基準として使用されません。リクエストURLのクエスチョンマークの前のパスが同じである限り、CDNプラットフォームには1つのキャッシュオブジェクトしか存在しません。つまり、このルールに関連付けられたドメインのすべてのリクエストは、キャッシュやオリジンからのファイルフェッチの際にクエリストリングを無視します。ユーザーが http://domain/a.jpg?version=1 にアクセスすると、CDN側でキャッシュヒットがない場合、CDNサーバーは http://domain/a.jpg からファイルをフェッチし、CDNサーバーにキャッシュします。次にユーザーが http://domain/a.jpg?version=2 のURLをリクエストすると、CDN側で直接キャッシュヒットが発生します。


例2:すべてのクエリストリングを保持 - すべてのクエリストリングパラメータでキャッシュ
以下のルール構成では、ユーザーが jpg タイプのファイルをリクエストする際、URLのすべてのクエリストリングパラメータがキャッシュ基準として使用されます。クエリストリングの任意のパラメータ値が異なる場合、CDN側で別のキャッシュエンティティがキャッシュされます。CDNでキャッシュヒットがない場合、完全なリクエストURLを使用してオリジンからファイルをフェッチします。ユーザーが http://domain/1.jpg?version=1&name=john にアクセスすると、CDNでキャッシュヒットがない場合、CDNサーバーは http://domain/1.jpg?version=1&name=john からファイルをフェッチし、プラットフォームにキャッシュします。次にユーザーが http://domain/1.jpg?version=1&name=john のURLをリクエストすると、CDNで直接キャッシュヒットが発生します。次のユーザーリクエストURLが http://domain/1.jpg?version=2&name=john の場合、キャッシュヒットは発生しません。


例3:一部のクエリストリングを保持 - 一部のクエリストリングパラメータを保持
以下のルール構成では、ユーザーが /directory/ ディレクトリのURLをリクエストする際、クエリストリングの name パラメータがキャッシュ基準として使用されます。クエリストリングの name パラメータの値が異なる場合、CDN側で別のキャッシュエンティティがキャッシュされます。CDNでキャッシュヒットがない場合、完全なリクエストURLを使用してオリジンからファイルをフェッチします。ユーザーが http://domain/1.jpg?version=1&name=john&year=1991 にアクセスすると、CDNでキャッシュヒットがない場合、CDNサーバーは http://domain/1.jpg?version=1&name=john&year=1991 からファイルをフェッチし、プラットフォームにキャッシュします。次にユーザーが http://domain/1.jpg?version=2&name=john&year=1991 のURLをリクエストすると、CDNで直接キャッシュヒットが発生します。次のユーザーリクエストURLが http://domain/1.jpg?version=1&name=sam&year=1991 の場合、キャッシュヒットは発生しません。


例4:一部のクエリストリングを保持 - 一部のクエリストリングパラメータを削除
以下のルール構成では、ユーザーが /query/1.jpg ディレクトリのURLをリクエストする際、クエリストリングの version パラメータはキャッシュ基準として使用されません。クエリストリングの version パラメータ値のみが異なる場合、ファイルはCDNサーバーに同じオブジェクトとしてキャッシュされます。他のパラメータ nameyear の値が異なる場合、別のオブジェクトがCDNサーバーにキャッシュされます。CDNでキャッシュヒットがない場合、完全なリクエストURLを使用してオリジンからファイルをフェッチします。ユーザーが http://domain/query/1.jpg?version=1&name=john&year=1991 にアクセスすると、CDNでキャッシュヒットがない場合、CDNサーバーは http://domain/query/1.jpg?version=1&name=john&year=1991 からファイルをフェッチし、CDNにキャッシュします。次にユーザーが http://domain/query/1.jpg?version=2&name=john&year=1991 のURLをリクエストすると、CDNで直接キャッシュヒットが発生します。次のユーザーリクエストURLが http://domain/query/1.jpg?version=1&name=sam&year=1991 の場合、キャッシュヒットは発生しません。


注意事項

すべてのクエリストリングパラメータをキャッシュしないように構成した場合、異なるクエリストリングパラメータ値ごとにCDNサーバーに別のオブジェクトがキャッシュされます。これにより、CDNプラットフォーム上のユーザーリクエストのキャッシュヒット率に影響を与え、オリジンサーバーへのリクエストが増加し、ウェブサイトのオリジンアクセスが増加する可能性があります。したがって、すべてのクエリストリングパラメータをキャッシュ条件として使用する必要がない場合は、キャッシュ目的でクエリストリングパラメータを無視するか、一部のパラメータのみをキャッシュ条件として使用することをお勧めします。