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 を有効にする手順は次のとおりです。
- Cloudflare ダッシュボード ↗ にログインします。
- アカウントとゾーンを選択します。
- Caching > Configuration を開きます。
- Enable Query String Sort のトグルを On にします。
サイトやアプリケーションがクエリ文字列の正確な順序を必要とする場合、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.3Query 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.3load[] パラメーターが入れ替わっている点に注意してください。アルファベット順では equest が hoverIntent より先になります。
このとき、ブラウザーコンソールには次のようなエラーが出ることが多いです。
_____ 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 を参照してください。