CloudFront如何针对特定查询字符串禁用缓存?
CloudFront指定查询字符串跳过缓存配置方案
你可以通过以下两种常用方案实现需求:
方案一:结合缓存策略 + 缓存键规则配置(推荐,CloudFront新版控制台支持)
- 首先进入对应CloudFront分发的行为配置页,选择你要修改的目标行为,点击编辑
- 找到「缓存键和源请求」设置模块:
- 查询字符串转发策略选择
全部转发,缓存基于白名单 - 白名单里不要添加你要跳过缓存的目标查询字符串
- 然后下拉找到「TTL设置」,将最小TTL、默认TTL都设置为
0,最大TTL可保留默认或者也设为0 - 额外新增一条缓存键例外规则:当请求中不存在你指定的查询字符串时,调整TTL为你正常需要的缓存时长
- 查询字符串转发策略选择
- 保存配置等待分发生效即可
方案二:通过CloudFront Function实现更灵活的控制
如果你的规则更复杂(比如多个指定查询字符串匹配),可以用轻量的CloudFront Function处理:
- 进入CloudFront控制台的「函数」页面,新建一个函数,填入如下示例代码(替换
skip_cache_query为你实际要匹配的查询字符串名):
function handler(event) { var request = event.request; // 检查是否存在指定的查询字符串 if (request.querystring['skip_cache_query']) { // 强制设置不缓存的头 request.headers['cache-control'] = { value: 'no-cache, no-store, must-revalidate' }; request.headers['pragma'] = { value: 'no-cache' }; } return request; }
- 测试函数逻辑无误后,将函数关联到目标行为的查看器请求事件阶段
- 同时确认源站返回的响应中,当存在指定查询字符串时也会返回
Cache-Control: no-cache头,或者你也可以再关联一个函数到源响应阶段覆写缓存头
注意:配置修改后最长需要5分钟左右全球节点生效,生效后可以通过CloudFront响应头中的
X-Cache字段验证是否命中缓存,出现Miss from cloudfront就是回源成功了。
内容的提问来源于stack exchange,提问作者tklodd
相关产品推荐
相关产品推荐

