如何对查询字符串包含'{'的CDN URL执行缓存失效操作
CDN携带特殊查询参数的URL缓存清除失败解决方案
报错原因
绝大多数CDN的缓存失效规则不允许路径中直接携带未编码的特殊字符,你给出的URL中查询参数包含{、}、"、[、]等JSON语法字符,属于CDN识别的非法路径字符,因此触发无效路径报错。
解决方案
- 方案1:对查询参数中的特殊字符做URL编码后再提交失效
需要编码的特殊字符对应规则如下:
你给出的示例URL编码后可正常提交的失效路径为:原字符 编码后值 {%7B}%7D"%22[%5B]%5D空格 %20/search/name?parent=true&filter=%7B%22age%22:5,%22skip%22:0,%22where%22:%7B%22address.pincode%22:%22403003%22%7D,%22include%22:%5B%22name%22,%20%22surname%22,%20%22address%22%5D%7D - 方案2:使用通配符批量匹配失效(适用需要清除同前缀所有缓存的场景)
绝大多数主流CDN都支持通配符*做路径匹配,如果你需要清除所有/search/name路径下带任意查询参数的缓存,直接提交/search/name*作为失效路径即可,无需拼接完整参数,操作更简便。注意提交前确认通配符范围,避免误清其他业务路径的缓存。 - 方案3:适配对应CDN的失效规则配置
部分CDN默认缓存失效仅匹配路径部分、忽略查询参数,你可以先检查CDN的缓存键规则是否开启了「携带查询参数区分缓存」,同步在失效配置中开启对应匹配规则后再提交完整路径。 - 方案4:API提交失效时做好参数转义
如果你是通过CDN开放API调用执行缓存失效,需要对提交的路径参数提前做URL编码,避免特殊字符被API网关识别为请求分隔符,导致参数解析异常。
内容的提问来源于stack exchange,提问作者SJain
相关产品推荐
相关产品推荐

