配置自定义Cachekey,开发者可以根据HTTP请求的不同部分(例如URI、请求参数、HTTP请求头或自定义变量等)制定规则来生成Cachekey,将访问同一个文件的一类请求转化为统一的Cachekey,避免将同一类请求缓存为不同文件的问题,从而提高缓存的命中率,降低回源率,减少请求的响应时间和带宽消耗。
使用场景
自定义Cachekey功能不会修改回源的URL,仅会修改请求的缓存标识,回源的请求和客户端发起的请求内容保持一致。
Cachekey是一个文件在DCDN节点上缓存时唯一的身份ID,每个在DCDN节点上缓存的文件都对应一个Cachekey。文件的Cachekey默认为客户端请求的URL(带参数)。
场景一
客户不同请求的URL中含有复杂的参数,因此即使多个请求访问的是同一个文件,但由于URL参数不同,DCDN节点会视为请求不同文件而将不同请求缓存成多个文件,造成回源的请求增加。
可通过自定义Cachekey规则将同一类请求的Cachekey统一,降低回源率。
场景二
客户端请求的URL一样时,DCDN将视为请求同一个文件。但实际上请求的Http Header中携带了client字段区分了客户端系统,希望请求不同文件。
此时可通过自定义Cachekey将client字段的值拼接至Cachekey,两个请求即可识别为2个不同的Cachekey。
操作步骤
登录DCDN控制台。
在左侧导航栏,单击域名管理。
在域名管理页面,单击目标域名对应的配置。
在指定域名的左侧导航栏,单击缓存配置。
在自定义Cachekey页签配置Cachekey。
说明支持对URI、参数操作、HTTP Header进行修改,同时支持自定义变量,从请求中提取需要的字段。最终的Cachekey将由URI、参数操作、HTTP Header、自定义变量四部分组合而成。

参数类型
操作说明
规则条件
规则条件能够对用户请求中携带的各种参数信息进行识别,以此来决定某个配置是否对该请求生效。
不使用:不使用规则条件。
若需新增或编辑规则条件,请在规则引擎中进行管理。
URI
当客户端请求的URI与配置中的源URI相匹配时,系统会用配置中的目标URI替换源URI,来生成Cachekey。则使用配置中的目标URI替换源URI来拼接Cachekey。
支持配置多个URI替换策略。若存在多条策略,则按照从上到下的顺序依次进行匹配。一旦匹配到某个源URI,系统将使用该策略对应的目标URI执行替换操作,并停止与后续策略的匹配。
源URI:以正斜线(/)开头的URI,不含http://头及域名。支持
PCRE正则表达式。目标URI:以正斜线(/)开头的URI,不含http://头及域名。
参数操作
操作的对象是用户发起的原始请求URL中携带的参数,可以对参数进行新增、删除、修改、保留操作,操作后的结果将会拼接到Cachekey中。支持设置多个操作,存在多个操作的情况下,将会从上到下按顺序逐个执行。
新增:将新增的请求参数拼接到Cachekey中。例如:原始URL为
http://image.example.com/cat.jpg,新增一个请求参数type=jpg,则Cachekey为http://image.example.com/cat.jpg?type=jpg。删除:在生成Cachekey的时候删除原始请求URL中的指定参数。例如:原始URL为
http://image.example.com/cat.jpg?type=jpg,删除参数type,则Cachekey为http://image.example.com/cat.jpg。修改:在生成Cachekey的时候修改原始请求URL中的指定参数。例如:原始URL为
http://image.example.com/cat.jpg?type=jpg,修改参数type=png,则Cachekey为。保留:在生成Cachekey的时候仅保留原始请求URL中的指定参数。例如:原始URL为
http://image.example.com/cat.jpg?type=jpg&path=image,保留参数type,则Cachekey为http://image.example.com/cat.jpg?type=jpg。
HTTP HEADER
将客户端原始请求中携带的指定HTTP Header的值拼接到Cachekey中。支持配置多个HTTP Header名称(多个 HTTP Header 名称之间用空格分隔),效果是每个HTTP Header的值将会按顺序拼接到Cachekey中。
例如:原始URL为
http://image.example.com/cat.jpg,客户端请求携带了一个HTTP Header(path:image);如果HTTP Header中设置了path这个请求头,则Cachekey为http://image.example.com/cat.jpgimage。自定义变量
可以使用正则表达式来匹配客户端原始请求中携带的指定请求参数的值、指定HTTP Header的值、指定Cookie参数的值、指定的URI,正则表达式匹配命中时,将对应的值拼接到Cachekey中。具体使用请参见配置示例。
单击确定,完成配置。
配置示例
URI
客户端的请求http://aliyundoc.com/a/b/image.jpg和http://aliyundoc.com/a/b/c/image.jpg 将视为请求同一个文件,该文件的Cachekey为http://aliyundoc.com/c/image.jpg。
参数操作
客户端的请求http://aliyundoc.com/a/b/image.jpg?delete_par=1&modify_par=1 将按规则添加add_par=1,删除delete_par,将modify_par的值修改为2,最终转化为http://aliyundoc.com/a/b/image.jpg?modify_par=2&add_par=1。
参数操作中,如对同一个变量同时进行了多个操作,则各种操作的生效优先级:新增>删除>仅保留>修改。

HTTP HEADER
客户端请求的HTTP HEADER的User-Agent和Accept-Language的值将被拼接到Cachekey中。例如请求http://aliyundoc.com/a/b/image.jpg中的User-Agent=Mozilla/5.0 (Linux; X11),Accept-Language=en,则该请求的Cachekey为:http://aliyundoc.com/a/b/image.jpgMozilla/5.0(Linux;X11)en。
自定义变量
示例一
变量名为language,来源为Request Header,来源字段名为Accept-Language,匹配规则为 ([%w]+),([%w]+),变量表达式为$1aa。
客户端的请求http://aliyundoc.com/a/b/image.jpg且携带HTTP请求头Accept-Language=en,ch ,则匹配规则将匹配到en赋值给变量表达式中的$1。变量表达式还将在末尾拼接上aa,得到enaa的变量并取别名为language,拼接在URL后方形成最终的Cachekey:http://aliyundoc.com/a/b/image.jpgenaa。
变量表达式中的$n的含义是匹配规则中第n个括号所匹配到的内容。例如示例一中Accept-Language=en,ch,匹配规则为([%w]+),([%w]+),则$1=en,$2=ch。
示例二
变量名为expired,来源为Request Cookie,来源字段名为a,匹配规则为[%w]+:(.*),变量表达式为 $1。
客户端的请求http://aliyundoc.com/a/b/image.jpg且携带Cookie a=expired_time:12635187,则匹配规则将匹配到12635187赋值给变量表达式中的$1并取别名为expired,拼接在URL后方形成最终的Cachekey:http://aliyundoc.com/a/b/image.jpg12635187。
示例三
同时设置URI规则和自定义变量。
URI:
将所有URI符合
/abc/.*/abc的请求都合并成/abc。
自定义变量:
变量名为
testname,来源为Path,匹配规则为/abc/xyz/(.*),变量表达式为$1。
客户端的请求URL
http://aliyundoc.com/abc/xyz/abc/image.jpg,按URI的配置Cachekey将被合并成http://aliyundoc.com/abc/image.jpg, 然后根据自定义变量的配置该URL将会命中/abc/xyz/(.*),此时$1将被赋值为abc并拼接到Cachekey中,形成最终的Cachekey:http://aliyundoc.com/abc/image.jpgabc,从而达到两个规则组合使用,实现更复杂的缓存逻辑。如果没有匹配到CacheKey的自定义变量,则变量表达式
$1就不会被拼接到CacheKey中。