自定义Cachekey

开发者可以根据用户请求中的不同部分(例如查询字符串、HTTP请求头或者Cookie等)制定规则来生成自定义缓存键(Cachekey),将访问同一个文件的一类请求转化为统一的Cachekey,避免将同一类请求到同一文件的不同副本,缓存为不同文件的问题,从而提高缓存的命中率,减少请求的响应时间和带宽消耗。

背景信息

  • 自定义Cachekey功能不会修改回源的URL,仅会修改请求的缓存标识,使回源请求与客户端请求保持一致。

  • Cachekey是文件在ESA节点上缓存时的唯一身份ID,每个在ESA节点上缓存的文件都对应一个Cachekey。Cachekey默认为客户端请求的完整URL(包含参数)。

应用场景

场景一:统一Cachekey

客户的不同请求URL中包含复杂的参数,因此,即使多个请求访问的是同一个文件,由于URL参数的差异,ESA节点会将这些不同的请求视为对不同文件的访问,并缓存为多个文件,进而导致回源请求的增加。

为此,您可以通过自定义Cachekey功能设置忽略查询字符串,将同一类请求的Cachekey进行统一,以降低回源率。

image

场景二:区分Cachekey

当客户端请求的URL相同时,ESA会将其视为同一个文件。然而,实际上请求的HTTP请求头中携带的client字段能够区分不同的客户端系统,表明希望请求不同文件。

此时,您可以通过自定义Cachekey功能根据客户端类型生成不同的Cachekey,从而使两个请求被识别为两个不同的Cachekey。

image

操作步骤

新增规则后,当用户发起资源访问请求时,ESA将根据规则的生效优先级依次进行匹配与执行。

  1. ESA控制台,选择站点管理,在站点列单击目标站点。

  2. 在左侧导航栏,选择规则 > 缓存规则

  3. 单击新增规则,填写规则名称

  4. 如果请求匹配以下规则...区域设置要匹配的用户请求特征,具体配置规则请参见规则表达式的组成

  5. 缓存资格区域,选择绕过缓存规则符合缓存条件

  6. 自定义Cachekey区域,单击配置,设置以下参数。

    image

    参数

    说明

    对查询字符串排序

    是否开启查询字符串排序功能。

    查询字符串

    设置去除请求URL中携带的?及其后面的查询字符串

    HTTP请求头

    • 包括这些标头名称及其值:将指定的HTTP请求头名称及其值加入Cachekey。

    • 检查是否存在:检查指定的HTTP请求头是否存在。如果存在,则将HTTP Header名称加入Cachekey。

    Cookie

    • 包括这些Cookie名称及其值:将指定的Cookie参数名称及其值加入Cachekey。

    • 检查是否存在:检查指定的Cookie参数是否存在。如果存在,则将Cookie参数名称加入Cachekey。

    用户

    • 设备类型:根据客户端User-Agent信息来识别客户端类型,然后根据客户端类型来生成Cachekey。

    • 国家/地区:根据客户端IP来识别客户端所在的国家/地区,然后根据国家/地区来生成Cachekey。

    • 语言:根据客户端请求中携带的Accept-Language信息来识别客户端语言,然后根据语言类型来生成Cachekey。

    缓存欺骗防御

    防御Web缓存欺骗攻击的同时,允许对静态内容进行缓存。

  7. 单击确定

配置示例

示例场景

  • 用户请求URL:http://www.example.com/image.jpg?key123=321&key456=654

  • 用户请求携带的请求头:

    • name123:321

    • name456:654

    • User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.X.X Safari/537.36

    • Accept-Language:zh-CN

  • 客户端使用中国电信的IP地址来访问。

功能配置

  • 查询字符串删除参数key456

  • HTTP请求头

    • 包括这些标头名称及其值name123

    • 检查是否存在name456

  • 用户设备类型国家/地区语言三个开关都打开。

image

生成Cachekey

每个参数生成的Cachekey片段为:

  • http://www.example.com/image.jpg?key123=321

  • name123:321

  • name456

  • desktop

  • CN

  • Accept-Language:zh-CN

所以,实际拼接生成的Cachekey:http://example.com/image.jpg?key123=321name123:321name456desktopCNAccept-Language:zh-CN

相关文档

规则相关的功能,在生效优先级、可重入性、生效颗粒度这三个特性上存在差异,详细情况请查看规则相关功能的特性说明