← Cloudflare Cache / cache / advanced-configuration
Query String Sort
Query String Sort повышает частоту попаданий в кэш за счёт предварительной сортировки строк запроса в единообразном порядке перед проверкой кэша Cloudflare.
By default, Cloudflare’s cache treats resources as distinct if their URL query strings are in a different order. For instance, these resources are cached separately:
/video/48088296?title=0&byline=0&portrait=0&color=51a516/video/48088296?byline=0&color=51a516&portrait=0&title=0
Query String Sort изменяет это поведение. Если существуют две строки запроса с одинаковым именем, 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:
- Войдите в Панель управления Cloudflare ↗.
- Выберите свой аккаунт и зону.
- Перейдите в Кеширование > Конфигурация.
- Для Включите Query String Sort, переключите тумблер в положение Включено.
Непредвиденное поведение страниц администрирования WordPress
Если сайту или приложению важен точный порядок параметров в query string, включение Query String Sort может привести к непредвиденному поведению.
Например, в панели администратора WordPress вы можете заметить следующее:
- В библиотеке медиафайлов не отображаются файлы
- Невозможность настроить сайт через Внешний вид > Настроить
- Невозможность перетащить виджет на боковую панель в Внешний вид > Виджеты
- Невозможность редактировать меню в Внешний вид > Меню
Чтобы понять причину этого, учтите, что WordPress объединяет файлы JavaScript ↗ для ускорения работы административного интерфейса. Способ, которым WordPress это реализует, включает несколько вхождений load[] параметров в строке запроса, где порядок этих параметров имеет решающее значение.
Определите проблему
На скриншоте ниже показан пример, когда ресурсы в Media Library отображаются некорректно, а консоль отладки браузера показывает, что страница выдаёт ошибку:
Если страница 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 сортирует параметры и значения в query string запроса, в результате чего получается следующее:
/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[] параметры были переставлены местами, так как equest должен идти перед hoverIntent при сортировке в алфавитном порядке.
В этом случае в консоли браузера вы, скорее всего, увидите ошибки, например:
_____ is not defined at load-scripts.php?c=0&load[]=...
Такая ошибка означает, что Query String Sort непреднамеренно нарушает работу некоторых функций страниц администрирования WordPress.
После сортировки запрос передаётся в инфраструктуру кэша Cloudflare (а также на исходный сервер, если ресурс отсутствует в кэше Cloudflare или не подлежит кэшированию). Исходный сервер отдаёт объединённые скрипты уже в другом порядке. Поскольку скрипты могут зависеть друг от друга, это может нарушить их зависимости.
Решение проблемы
Начните с анализа поведения вашего сайта или приложения в отношении использования строк запроса. Существуют ли у вас ресурсы, которые отдаются с разными возможными вариантами строк запроса?
For example, you might have an image resizing endpoint or a search form, where the order of query parameters might vary - such as width, height, and version - yet a unique parameter combination points to a single relevant asset.
Чтобы избежать проблем, учтите следующее:
- Отключение Query String Sort для сайта, если вы уверены, что эта функция не приносит пользы ни одной части вашего сайта. По умолчанию Cloudflare отключает эту опцию в Кеширование приложение.
- С помощью Cache Rules включите Query String Sort (установите Ключ кеша > Сортировка строки запроса:
On) для URL, где порядок параметров строки запроса не важен. - Также можно использовать Cache Rules, чтобы отключить Query String Sort для URL-адресов, где требуется определённый порядок параметров. Например, задайте Ключ кеша > Сортировка строки запроса:
Offдля путей URI, начинающихся с/wp-admin/load-scripts.php, или для любых URL с аналогичными требованиями.
Чтобы узнать больше о Cache Rules, перейдите на Cache Rules.