忽略问号参数

更新时间:2024-07-01 12:06:55

当用户请求您的网站资源时,可能会在请求URL中通过问号标识携带一些具有特殊作用的参数来完成您希望实现的业务逻辑,比如:
http://domain/1.jpg?version=1,CDNetworks CDN平台默认在CDN节点缓存完整URL请求的资源,即问号后的参数值不同,将会缓存多份文件资源,用户请求URL只有完整匹配缓存的URL,才会在CDN节点命中缓存。
当问号后的参数数量较多的情况下,可能会导致在CDN节点的缓存文件数量增多,平台缓存的命中率有可能会明显降低,导致回您源站的请求变多,同时也会影响对用户请求的响应效率,最终影响用户体验和提高您的源站访问压力及运营成本。
若用户访问您的网站资源时,请求URL中问号标识之前的路径一致而问号标识之后的参数不同,您的网站返回给用户的实际是同一份资源文件,建议您在我们平台配置忽略问号后的参数进行缓存的策略,提升CDN节点的命中率,保障您网站用户的体验与降低源站访问压力及成本。

如何设置忽略问号参数

  1. 登录CDNetworks控制台, 选择对应的产品。
  2. 进入自助配置页面,找到要设置的域名,点击上方配置修改或者域名右侧的编辑按钮[Feature Upgrade] Advanced Access Control
  3. 进入配置修改页面,找到缓存优化下的忽略问号参数,点击添加按钮。
  4. 进入规则编辑页面,可以根据您的需要,添加以下配置项。

生效范围
CDNetworks CDN平台为您提供以下几个生效范围选项,您可以自己选择自定义该规则要适用的请求内容。

参数 描述
所有请求 表示所有面向关联该配置的域名发起的内容请求都适用于该规则。
指定文件类型 表示所有面向指定文件类型的内容请求,都适用于该规则;可选择常用类型或自定义文件类型,多个文件类型之间以;分隔,例如:ace;aac
指定URI 可以设置特定URI的请求执行该规则,单条规则只允许配置单个指定的URI;
需要注意的是,您输入的URI不包含http://或者https://,仅配置URI部分,例如:完整URL为https://domain/browse/index.html,您仅配置/browse/index.html即可,且不能包含?
指定目录 表示所有面向指定目录的内容请求,都适用于该规则;目录必须以/开头和结尾,由字母、数字及部分特殊符号(包含下划线、减号、百分号、点)任意组合,例如:/file/1%1/,表示http://domain/file/1%1/该目录及目录下所有文件的请求都适用于该规则;
需要注意的是,多个目录需要用换行符分隔。
URL正则匹配 您也可以选择直接填入正则表达式,不需要以/开头,平台默认会在配置中补充URL前缀^https?://[^/]/,例如: .*.jpg$,表示针对关联该规则的所有域名对JPG文件的请求都将匹配该规则。

选择完您希望该规则适用的用户请求范围后,您可以配置用户请求URL中问号标识后的参数是否作为CDN节点的缓存和响应用户请求的判断条件。CDNetworks CDN平台为您提供3种配置选项,分别如下:

  • 去问号-不带参数缓存

    表示忽略请求URL中问号标识后的参数,当问号后的参数不同,CDN节点也只缓存问号前的文件资源,用户请求URL中问号标识后的参数不同, 最终在CDN节点将命中同一份文件;
    此时,您还可以继续选择配置在CDN节点没有文件缓存,需要回源站获取用户请求的文件资源时,是否忽略URL中问号后的参数发起回源请求。和CDN节点对用户请求文件资源的缓存及响应规则一样,若您选择了,则由CDN节点回源站的请求URL将去掉问号后的参数;相反,当您选择了,CDN节点将按照用户的请求URL即带着问号后的参数,对源站发起请求。


  • 不去问号-带所有参数缓存

    表示CDN节点不忽略请求URL中问号标识后的参数,并且将完整的URL,也就是问号后的所有参数将共同作为CDN节点缓存的判断条件;
    当请求URL的问号标识后有任何一个参数值不同时,CDN节点都会进行缓存,意味着CDN节点会缓存多份文件,用户请求URL中问号标识后的参数值有任何一个不同,都将在CDN节点上命中不同的缓存文件,而CDN节点需要回源站请求文件时,也将会保留用户请求URL中问号标识后的所有参数对源站发起请求。

  • 不去问号-带部分参数缓存

    和上一个选项类似,CDN节点在缓存和响应用户请求的文件资源时,不忽略请求URL中问号标识后的参数,但不同的是,您在这一配置中可以自定义问号后有哪几个参数作为缓存和请求响应的判断条件,只有当您指定要作为缓存条件的问号后的参数值不一致时,CDN节点才会进行缓存和将对应的缓存文件响应给特定的用户请求;
    在这个配置中,您可以通过选择保留部分参数,将问号后的部分参数共同作为CDN节点缓存的判断条件,或者您可以选择删除部分参数,即排除问号后的部分参数,仅保留其他参数作为CDN节点缓存的判断条件;您可以同时定义多个参数,用;分隔,例如:name;year
    除此之外,您还可以选择在CDN节点没有缓存需要回源请求时,回源请求的URL是否保留用户请求URL中问号标识后的参数,包括保留所有参数保留部分参数删除部分参数,三个选项的含义与上文其他部分提及时是一致的;当选择了删除部分参数时,您如果输入-,则表示回源请求URL将不带参数;您可以同时定义多个参数,用;分隔。


忽略大小写
您如果选择了,将会忽略您定义的生效范围规则的大小写匹配用户请求,即表示两个资源请求URL,如果只有生效范围中字母大小写的区别,会匹配相同的规则,比如您配置http://domain/a.jpg?version=1忽略问号后参数进行缓存则http://domain/A.jpg?version=1一样会生效;
相反,如果您选择了,即不忽略生效范围规则的字母大小写区别,则将严格按照您在生效范围配置中的设置,匹配用户的请求,只对符合大小写要求的资源文件在CDN边缘节点按您定义的规则进行缓存;
该配置项默认值为

优先级
您可以选择该规则生效的优先级,从1-10,数字越大匹配和执行的优先级越高。在同一匹配条件下,执行优先级高的规则。

完成上述配置后,请点击确认,然后选择下一步提交您的配置。为了避免配置影响您的生产环境,我们推荐您先预部署,把配置生效到测试环境中来验证您的配置是否正确。当配置确定无误后,单击直接部署将配置正式生效到线上环境,通常约3-5分钟后,配置将正式生效到线上环境。关于预部署测试的更多细节,请参考教程通过预部署来验证配置是否生效

配置示例

示例一:去问号-不带参数缓存且需要去问号回源
如下图的规则配置,URL中问号后的参数不作为缓存的条件,只要请求URL问号前的路径一致则缓存同一份文件,意味着关联该规则的域名所有请求将会忽略问号后参数在CDN节点进行缓存或者回源获取源站文件;
当用户访问http://domain/a.jpg?version=1,在CDN节点未命中时,CDN节点以http://domain/a.jpg回源获取文件后,在CDN节点上缓存该文件;
当下一次用户请求URL为http://domain/a.jpg?version=2时,将会直接在CDN节点命中缓存。


示例二:不去问号-带所有参数缓存
如下图的规则配置,用户请求文件类型为jpg时,URL中问号后的参数将全部作为缓存的条件,只要请求URL中问号后有任何一个参数值不同,都将在CDN节点上独立缓存一份文件,且在CDN节点没有缓存时,都将直接以用户的完整请求URL回源站获取文件;
当用户访问http://domain/1.jpg?version=1&name=john,在CDN节点未命中时,CDN节点以http://domain/1.jpg?version=1&name=john对源站发起请求并获取文件,节点缓存该文件;
若下一次用户请求URL为http://domain/1.jpg?version=1&name=john时,可以直接在CDN节点命中缓存;
若下一次用户请求URL为http://domain/1.jpg?version=2&name=john时,则不会命中缓存。


示例三:不去问号-保留部分参数
如下图的规则配置,用户请求URL的目录为/directory/时,URL中问号后的部分参数如示例中的name将作为缓存的条件,如果请求URL中问号后的name参数值不同,都将在CDN节点上独立缓存一份文件,在CDN节点没有缓存时,都将直接以用户的完整请求URL回源站获取文件;
当用户访问http://domain/1.jpg?version=1&name=john&year=1991,在CDN节点未命中时,CDN节点以http://domain/1.jpg?version=1&name=john&year=1向源站发起请求并获取文件后,在CDN节点缓存该文件;
若下一次用户请求的URL为http://domain/1.jpg?version=2&name=john&year=1991时,可以在CDN节点命中缓存;
若下一次用户请求的URL为http://domain/1.jpg?version=1&name=sam&year=1991时,将不会在CDN节点命中缓存。


示例四:不去问号-删除部分参数
如下图的规则配置,用户请求URI的目录为/query/1.jpg时,URL中问号后的部分参数如示例中的version将不被作为缓存的条件,如果请求URL中问号后的只有version参数值不同,都将在CDN节点上缓存为同一份文件,除了version外,name或者year有任何一个参数值不一致时,对应的文件资源都将在CDN节点上独立缓存;同时,在CDN节点没有缓存时,都将直接以用户的完整请求URL回源站获取文件;
当用户访问http://domain/query/1.jpg?version=1&name=john&year=1991,在CDN节点未命中时,CDN节点以http://domain/query/1.jpg?version=1&name=john&year=1991向源站发起请求并获取文件后,在CDN节点缓存该文件;
若下一次用户请求的URL为http://domain/query/1.jpg?version=2&name=john&year=1991时,可以在CDN节点命中缓存;
若下一次用户请求的URL为http://domain/query/1.jpg?version=1&name=sam&year=1991时,将不会在CDN节点命中缓存。


注意事项

如果您选择了不忽略URL中问号后的所有参数进行缓存时,只要有任一个参数值不同,都将在CDN节点上作为独立缓存的文件资源,会影响您网站的用户请求在CDN节点上的缓存命中率,如果在CDN节点没有缓存时,将按用户完整URL向源站发起请求,从而给您的网站带来更多的回源访问量,所以如果您的业务不是很有必要需要把所有问号后的参数作为缓存条件,建议您忽略URL中问号后的参数进行缓存或仅将部分参数作为缓存的条件。

本篇文档内容对您是否有帮助?
有帮助
我要反馈
提交成功!非常感谢您的反馈,我们会继续努力做到更好!