INTEGRITY Документация

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:

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:

  1. Войдите в Панель управления Cloudflare.
  2. Выберите свой аккаунт и зону.
  3. Перейдите в Кеширование > Конфигурация.
  4. Для Включите Query String Sort, переключите тумблер в положение Включено.

Непредвиденное поведение страниц администрирования WordPress

Если сайту или приложению важен точный порядок параметров в query string, включение Query String Sort может привести к непредвиденному поведению.

Например, в панели администратора WordPress вы можете заметить следующее:

Чтобы понять причину этого, учтите, что WordPress объединяет файлы JavaScript для ускорения работы административного интерфейса. Способ, которым WordPress это реализует, включает несколько вхождений load[] параметров в строке запроса, где порядок этих параметров имеет решающее значение.

Определите проблему

На скриншоте ниже показан пример, когда ресурсы в Media Library отображаются некорректно, а консоль отладки браузера показывает, что страница выдаёт ошибку:

Ресурсы в 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.

Чтобы избежать проблем, учтите следующее:

Чтобы узнать больше о Cache Rules, перейдите на Cache Rules.