跳转到内容
搜索文档

查询字符串排序(Query String Sort)

最后更新 查看 MarkdownAgent 设置

Query String Sort(查询字符串排序) 在检查 Cloudflare 缓存之前,首先将查询字符串排序为一致顺序,从而提高缓存命中率。

默认情况下,如果 URL 查询字符串顺序不同,Cloudflare 的缓存会将资源视为不同。例如,这些资源被分别缓存:

  • /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

可用性

FreeProBusinessEnterprise

Availability

No

No

No

Yes


启用 Query String Sort

要启用 Query String Sort:

  1. 登录 Cloudflare 仪表板
  2. 选择您的账户和 zone。
  3. 前往 Caching(缓存) > Configuration(配置)
  4. 对于 Enable Query String Sort(启用查询字符串排序),将开关切换为 On(开启)

WordPress 管理页面的意外行为

当站点或应用程序需要精确的查询字符串顺序时,启用 Query String Sort 可能导致意外行为。

例如在 WordPress 管理 UI 中,您可能会注意到以下任何行为:

  • 媒体库中没有媒体显示
  • 无法通过 Appearance > Customize 自定义站点
  • 无法在 Appearance > Widgets 中将任何小组件拖到侧边栏
  • 无法在 Appearance > Menus 中编辑菜单

要理解原因,请注意 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 将对请求查询字符串中的参数和值进行排序,结果如下:

/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 缓存中或不可缓存,则也进入源站服务器)。源站服务器然后提供合并的脚本,其顺序不同。由于脚本可能依赖其他脚本,此过程可能破坏依赖关系。

应对此问题

首先分析站点或应用程序围绕查询字符串使用的行为。您是否有以多种可能的查询字符串排列方式提供的资源?

例如,您可能有图片调整大小端点或搜索表单,查询参数的顺序可能不同——如 width、height 和 version——但唯一的参数组合指向单个相关资源。

为减少问题,请考虑:

  • 如果您确定此功能对站点任何部分都没有价值,为站点禁用 Query String Sort(查询字符串排序)。Cloudflare 在 Caching(缓存) 应用中默认禁用此选项。
  • 使用 Cache Rules 为保留查询字符串参数顺序不重要的 URL 启用 Query String Sort(查询字符串排序)(设置 Cache key(缓存键) > Sort query string(排序查询字符串)On)。
  • 或者,使用 Cache Rules 为需要特定参数顺序的 URL 禁用 Query String Sort(查询字符串排序)。例如,对以 /wp-admin/load-scripts.php 开头的 URI 路径或任何具有类似要求的 URL,设置 Cache key(缓存键) > Sort query string(排序查询字符串)Off

要了解更多关于 Cache Rules 的信息,请访问 Cache Rules


相关资源

这篇文档对您有帮助吗?