Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

クエリ文字列のソート

最終更新 Markdown で表示Agent セットアップ

Query String Sort(クエリ文字列のソート)は、Cloudflare のキャッシュを確認する前にクエリ文字列を一定の順序へ並べ替え、キャッシュヒット率を上げます。

デフォルトでは、Cloudflare のキャッシュは URL のクエリ文字列の順序が違うと、別のリソースとして扱います。たとえば、次のリソースは別々にキャッシュされます。

  • /video/48088296?title=0&byline=0&portrait=0&color=51a516
  • /video/48088296?byline=0&color=51a516&portrait=0&title=0

Query String Sort を使うと、この動作が変わります。同じ名前のクエリ文字列が 2 つある場合は、パラメーター値で URL を並べ替えます。例:

/example/file?word=alpha&word=beta/example/file?word=beta&word=alpha

は、次のように並べ替えられます。

/example/file?word=alpha&word=beta

利用可否

Free Pro Business Enterprise
利用可否 いいえ いいえ いいえ はい

Query String Sort を有効にする

Query String Sort を有効にする手順は次のとおりです。

  1. Cloudflare ダッシュボード にログインします。
  2. アカウントとゾーンを選択します。
  3. Caching > Configuration を開きます。
  4. Enable Query String Sort のトグルを On にします。

WordPress 管理画面での想定外の動作

サイトやアプリケーションがクエリ文字列の正確な順序を必要とする場合、Query String Sort を有効にすると想定外の動作が起きることがあります。

たとえば WordPress の管理 UI では、次のような現象が出ることがあります。

  • メディアライブラリにメディアが表示されない
  • 外観 > カスタマイズ でサイトをカスタマイズできない
  • 外観 > ウィジェット でウィジェットをサイドバーにドラッグできない
  • 外観 > メニュー でメニューを編集できない

理由を理解するには、WordPress が管理画面を高速化するために JavaScript ファイルを結合する 点に注目してください。この実装では、クエリ文字列に load[] パラメーターが複数回現れ、その順序が重要です。

問題を特定する

次のスクリーンショットは、メディアライブラリのリソースが正しく描画されず、ブラウザーのデバッグコンソールにエラーが出ている例です。

メディアライブラリのリソースが正しく描画されない

load-scripts.php ページが読み込まれると、ブラウザーは Cloudflare に次のリクエストを送ります。

/wp-admin/load-scripts.php?c=0&load%5B%5D=hoverIntent,common,admin-bar,underscore,shortcode,backbone,wp-util,wp-backbone,media-models,wp-plupload,wp-mediaelement,wp-api-r&load%5B%5D=equest,media-views,media-editor,media-audiovideo,mce-view,imgareaselect,image-edit,media-grid,media,svg-painter&ver=5.0.3

Query String Sort が有効な場合、Cloudflare はリクエストのクエリ文字列のパラメーターと値を並べ替え、次のようになります。

/wp-admin/load-scripts.php?c=0&load%5B%5D=equest,media-views,media-editor,media-audiovideo,mce-view,imgareaselect,image-edit,media-grid,media,svg-painter&load%5B%5D=hoverIntent,common,admin-bar,underscore,shortcode,backbone,wp-util,wp-backbone,media-models,wp-plupload,wp-mediaelement,wp-api-r&ver=5.0.3

load[] パラメーターが入れ替わっている点に注意してください。アルファベット順では equesthoverIntent より先になります。

このとき、ブラウザーコンソールには次のようなエラーが出ることが多いです。

_____ is not defined at load-scripts.php?c=0&load[]=...

この種のエラーは、Query String Sort が WordPress 管理画面の一部機能を意図せず壊していることを示します。

並べ替えのあと、クエリは Cloudflare のキャッシュ基盤に送られます(リソースがキャッシュにない、またはキャッシュできない場合はオリジンサーバーにも送られます)。オリジンサーバーは、順序が異なる結合済みスクリプトを返します。スクリプト同士に依存関係がある場合、この処理で依存が壊れることがあります。

問題への対応

まず、サイトやアプリケーションがクエリ文字列をどう使っているかを確認します。同じアセットが、クエリ文字列の並びが複数通りある状態で配信されていませんか。

たとえば、画像リサイズのエンドポイントや検索フォームでは、width、height、version などクエリパラメーターの順序が変わっても、同じパラメーターの組み合わせは 1 つのアセットを指すことがあります。

問題を抑えるには、次を検討します。

  • この機能がサイトのどこにも価値を加えないと確信できる場合は、サイトの Query String Sort を無効にします。Cloudflare は Caching アプリで、このオプションをデフォルトで無効にしています。
  • Cache Rules で、クエリ文字列パラメーターの順序を保つ必要がない URL に Query String Sort を有効にします(Cache key > Sort query string: On)。
  • あるいは、特定のパラメーター順序が必要な URL では Cache Rules で Query String Sort を無効にします。たとえば、URI パスが /wp-admin/load-scripts.php で始まる場合や、同様の要件がある URL では、Cache key > Sort query string: Off にします。

Cache Rules の詳細は Cache Rules を参照してください。


関連リソース

役に立ちましたか?