如何控制通过AWS CloudFront分发内容的浏览器缓存时长?
控制CloudFront+S3架构下的浏览器缓存时长
好问题!其实在S3+CloudFront的架构里,浏览器的缓存时长和CloudFront的缓存时长是可以灵活分开控制的,我结合你的场景给你梳理几个实用方案:
方法一:用S3的Cache-Control元数据精准区分控制
你之前用到的max-age是通用参数,会同时作用于浏览器和CloudFront,但Cache-Control还有个专门针对**共享缓存(比如CDN、代理服务器)**的s-maxage参数——刚好可以用来单独指定CloudFront的缓存时长,而max-age就专门留给浏览器。
举个例子,给S3文件设置这样的元数据:
Cache-Control: max-age=3600, s-maxage=86400
这就意味着:
- 用户浏览器会把这个文件缓存1小时(3600秒)
- CloudFront则会缓存这个文件1天(86400秒)
如果不指定s-maxage,CloudFront会默认沿用max-age的值作为自己的缓存时长。
方法二:通过CloudFront行为批量配置浏览器缓存规则
如果你不想逐个修改S3文件的元数据,想要统一控制所有(或某一类)文件的浏览器缓存策略,可以在CloudFront的分发行为里设置:
- 打开你的CloudFront分发控制台,找到对应的**行为(Behavior)**并进入编辑页面
- 找到「浏览器缓存设置」(Browser Cache Settings)选项
- 选择「自定义」(或新版的「自定义缓存策略」),然后设置你需要的
max-age值,同时可以选择是否开启「覆盖源站的Cache-Control头」
这种方式适合批量生效的场景,比如全站静态资源统一设置浏览器缓存10分钟,而且如果开启了覆盖,CloudFront的配置会优先于S3的元数据生效。
补充:缓存规则的优先级
这里给你提个醒,缓存规则的生效优先级是:
CloudFront行为的浏览器缓存设置 > S3对象的Cache-Control元数据 > CloudFront默认缓存规则
所以如果两种配置都用了,以优先级高的为准。
内容的提问来源于stack exchange,提问作者Joey Yi Zhao
相关产品推荐
相关产品推荐

