新上线功能小介-浏览器缓存与参数顺序识别
针对最近刚上线的几个功能,做个简单的介绍。
浏览器缓存
browser_cache,即浏览器缓存,顾名思义,即是控制客户浏览器端的一个缓存时间。一般使用 CDN 加速的用户,都会根据自己的需求设置不同的缓存规则,且这部分缓存是缓存在 CDN 厂商提供的边缘节点上。而浏览器缓存则是直接控制客户访问的浏览器端的一个缓存时间,更加简单暴力的把所需要缓存在最终端用户的内容缓存下来。
功能:控制客户浏览器端的缓存时间。
配置:又拍云管理后台服务>配置>基础配置>浏览器缓存
设置的方法参考缓存配置,只需设置资源路径与对应的缓存时间即可。
注意要点:
如果设置的浏览器缓存时间大于文件在 CDN 节点上的缓存时间,则此浏览器缓存时间失效,仍以 CDN 节点的缓存时间为准。
这里分三种情况:
1:CDN 设置了缓存时间,浏览器又设置了缓存时间,这时候就需要对比两个缓存时间,以小为准。
比如:
CDN 设置了缓存时间为2天 浏览器缓存1天 即浏览器缓存时间为1天
CDN 设置了缓存时间为2天 浏览器缓存3天 即浏览器缓存时间为1天
即浏览器缓存时间不能大于 CDN 缓存时间,如果大于 CDN 缓存时间,则直接遵循 CDN 缓存时间。
2:CDN 未设置缓存时间,源站吐出相应的缓存时间,也是对比两个缓存时间,以小为准。
比如:
源站吐了 no-store 浏览器缓存3天 即浏览器缓存时间为 no-store
源站吐了 4天 浏览器缓存3天 即浏览器缓存时间为 3天
即在不设置 CDN 缓存的情况下,浏览器缓存与源站进行对比,谁小遵循谁。
3.CDN 、源站、浏览器缓存同时设置了缓存时间,由于又拍云 CDN 缓存配置的优先级,自定义设置了 CDN 缓存时间优先级大于源站缓存,则就直接回到第一种情况,浏览器与 CDN 缓存进行对比。
参数顺序识别
参数顺序识别,也是近期针对缓存配置做的一个小的优化功能。
我们都知道,把文件缓存在离用户最近的边缘节点,可以让用户体验最好的用户体验,而缓存则是通过对完整的 url 进行缓存才能实现,完整的 url 中则可能包含各种不同的参数,但是由于各种参数在查询字符串中的位置可能不同,则导致同一个 url 可能由于url 中参数的位置不一样,可能就不命中缓存,而需要重新回源。所以我们开发了这个小功能,针对参数顺序进行识别排序。
功能:针对 URL 中参数相同,只是排序不同的文件,CDN 节点将会忽略参数的排序,只缓存一份。
配置:又拍云管理后台服务>配置>高级功能>参数顺序识别
设置的方法很简单,只需要一键确认是否开启参数顺序识别,即可开启对应配置。
注意要点:
通常 CDN 节点是以整条 URL 为粒度对文件进行缓存的,然而 URL 中参数的不同排列组合使得 CDN 节点会将同一份文件缓存多份。
例如下方三条 URL,对应的文件是相同的,然而 CDN 节点是分开缓存的:
https://www.upyun.com/test.jpg?a=1&b=2&c=3
https://www.upyun.com/test.jpg?c=3&b=2&a=1
https://www.upyun.com/test.jpg?b=2&a=1&c=3
开启参数顺序识别之后,则会对URL 中的参数按特有的规则进行排序,然后再查找匹配节点缓存或直接回源获取文件。
排序策略:
参数KEY字典序小的优先。
若参数KEY字典序相同,参数VALUE为boolean(形同?a中的a的VALUE,?a=&b&c=1中的b的VALUE)的优先。
若参数值都为布尔则任意排序,否则以参数VALUE字典序小的优先。
特别注意的是:开启此功能后,因 CDN 节点会将用户访问 URL 中的参数重新排序后进行缓存匹配,所以将有可能无法匹配之前已缓存的文件,导致回源带宽增大,所以请谨慎开启。建议在刚创建新空间时开启。