Google Cloud CDN能否基于请求体而非URL生成缓存KEY?
Google CDN 缓存Key配置及URL改造方案解答
1. Google CDN是否支持请求体作为缓存Key
Google CDN 默认仅将请求URL、请求方法(仅GET、HEAD默认纳入缓存范围)等请求行信息纳入缓存Key计算,不支持直接将请求体内容作为缓存Key的配置选项。
额外说明:如果你的存量API使用POST方法发起请求,Google CDN默认不会缓存POST请求的响应,即使手动开启POST请求缓存的特殊配置,依然无法把请求体内容纳入缓存Key的计算规则。
2. 请求体Base64编码写入URL的方案可行性
该方案本身是可行的,落地时需要注意以下约束:
- 注意URL长度上限:主流浏览器、Web服务器、CDN节点默认支持的最长URL长度为2048字节,部分环境可放宽到8192字节,你需要先评估XML请求体Base64编码后的长度是否超出对应环境的限制,超出则无法直接使用该方案。
- 做URL安全的Base64转换:标准Base64编码结果包含
+、/、=三个URL敏感字符,编码后需要做转换处理:将+替换为-、/替换为_、删除末尾补位的=或者对=做URL编码,避免URL解析异常。 - 优化缓存命中率:如果XML请求体中存在不影响响应结果的冗余字段、或者字段顺序不固定,建议先对请求体做字段裁剪、固定字段排序后再进行编码,避免同一个逻辑请求生成不同的URL,降低缓存命中率。
- 后端适配改造:需要同步改造后端服务逻辑,支持从指定URL参数中提取Base64字符串、解码还原为原始XML请求体处理,不需要再读取原始请求的Body内容。
如果你的XML请求体普遍较大,编码后超出URL长度限制,也可以调整为对请求体做MD5或者SHA256哈希计算后作为URL参数,后端提前存储哈希值和原始请求体的映射关系即可,该方案更适合请求体重复率较高的场景。
内容的提问来源于stack exchange,提问作者user4969067
相关产品推荐
相关产品推荐

