当前位置: 首页 > news >正文

【Amazon 实验②】使用缓存策略及源请求策略,用于控制边缘缓存的行为及回源行为

文章目录

    • 1. 了解缓存策略和源请求策略
      • 1.1 使用缓存键和缓存策略
    • 实验:使用CloudFront缓存策略和缓存键控制缓存行为

接上一篇文章【Amazon 实验①】使用 Amazon CloudFront加速Web内容分发,我们现在了解和配置如何使用缓存策略及源请求策略,用于控制边缘缓存的行为及回源行为。

1. 了解缓存策略和源请求策略

基于步骤1中的CloudFront分配,了解和配置如何使用缓存策略及源请求策略,用于控制边缘缓存的行为及回源行为。

1.1 使用缓存键和缓存策略

CloudFront缓存策略

  • CloudFront缓存策略由缓存键值(Cache Key)和 TTL 构成。

  • CloudFront提供了多种预设的托管缓存策略 ,适配不同场景中的缓存行为控制,如我们在步骤1中使用的CachingOptimized、CachingDisabled等。

CloudFront可识别以下三种请求元素,进而将指定元素作为缓存键值进行缓存,分别为:请求头 / 查询字符串 / Cookie,合理地配置缓存键将提高对象在边缘站点上的缓存命中率。

image-20231221113557586

如何控制缓存时间

可以通过2种方式控制缓存时间:

  • 源站的缓存标头Cache-Control,如max-age、expires、no-cache、private等值
  • CloudFront缓存策略中的TTL

image-20231221113642822

当同时在源站指定Cache-Control标头并使用CloudFront缓存策略时,有关两者将如何影响CloudFront边缘缓存时间和客户端缓存时间。

实验:使用CloudFront缓存策略和缓存键控制缓存行为

在步骤1,我们为CloudFront的默认行为添加了S3桶源站,并分发了一张infra.png图片和index.html主页文件。

在该行为设置中,我们使用了托管的CachingOptimized缓存策略。该策略包含以下设置: 此策略包含以下设置:

  • 最小 TTL:1 秒。
  • 最大 TTL:31536000 秒(365 天)。
  • 默认 TTL:86400 秒(24 小时)。
  • 缓存键中包含的标头:未明确包含任何标头。包含标准化的 Accept-Encoding 标头,因为已启用缓存压缩对象设置
  • 缓存键中包含的 Cookie:无。
  • 缓存键中包含的查询字符串:无。
  • 缓存压缩对象设置:已启用

在接下来的实验中,我们将在URL中使用查询字符串参数访问infra.png,如 https://d123abc.cloudfront.net/infra.png?version=v1 和 https://d123abc.cloudfront.net/infra.png?version=v2 ,验证当前CachingOptimized缓存策略对不同版本的infra.png的缓存效果,并新建基于querystring缓存的缓存策略。

在本实验中我们使用S3对象版本控制模拟需要查询字符串访问的环境。首先回到S3存储桶中,在属性中打开版本控制。

  • 打开存储桶版本控制

image-20231221113904237

  • 更新S3存储桶策略,在Action处添加 s3:GetObjectVersion

image-20231221113958595

上传另一张名为infra.png的图片至S3,在S3对象的版本处,能看到infra.png具有2个版本。

image-20231221114115742

使用CloudFront分配url访问infra.png,并在url中添加?versionId=查询字符串,加入infra.png的版本号。可以看到CloudFront对于不同的URL返回了同样的缓存,这是因为在托管的CachingOptimized缓存策略中并未使用query string(versionId)作为缓存键,故提供先前已缓存在边缘节点的对象(即infra.png,不带其他cache key)

image-20231221114415181

为了使得CloudFront能够根据查询字符串缓存结果,我们需要新建一个CloudFront分配行为和缓存策略。在行为路径中指定/*.png,在缓存策略处点击新建缓存策略,添加 versionId 作为需要缓存的查询字符串,其他TTL设置按需调整,如下图所示。保存缓存策略后,为该行为选择新建的缓存策略。

image-20231221114617482

image-20231221122530374

image-20231221114930654

image-20231221115022144

image-20231221114701352

进入CloudFront失效标签,键入/infra.png使缓存失效。

image-20231221115117072

image-20231221115146112

image-20231221115318010

再次访问两个包含query string的infra.png URL,将看到CloudFront已区分infra.png的查询字符串将versionId作为缓存键进行缓存。

image-20231221122850363

在这里插入图片描述

相关文章:

  • 攻防世界——game 游戏
  • 10 本让我 2023 年「生产力」暴增 5 倍的经典书|收藏
  • 05. Springboot admin集成Actuator(一)
  • Qt之QWidget 自定义倒计时器
  • 操作系统--磁盘存储器的管理
  • Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现
  • linux sed命令操作大全
  • Spring IoCDI
  • Mac OS 13+,Apple Silicon,删除OBS虚拟摄像头(virtual camera),
  • 网络爬虫之Ajax动态数据采集
  • 力扣labuladong——一刷day77
  • Debezium系列之:Flink SQL消费Debezium数据格式,同步数据到下游存储系统
  • 【时序分析】TimeGPT:首个时间序列分析基础大模型
  • Python生成器与迭代器
  • 列举mfc140u.dll丢失的解决方法,常见的mfc140u.dll问题
  • 深入了解以太坊
  • ➹使用webpack配置多页面应用(MPA)
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • java2019面试题北京
  • Java应用性能调优
  • LintCode 31. partitionArray 数组划分
  • PHP 的 SAPI 是个什么东西
  • React-redux的原理以及使用
  • unity如何实现一个固定宽度的orthagraphic相机
  • vue-loader 源码解析系列之 selector
  • Web Storage相关
  • yii2权限控制rbac之rule详细讲解
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 悄悄地说一个bug
  • 如何在GitHub上创建个人博客
  • 思否第一天
  • 学习Vue.js的五个小例子
  • 正则表达式小结
  • 第二十章:异步和文件I/O.(二十三)
  • #pragma pack(1)
  • #WEB前端(HTML属性)
  • #Z0458. 树的中心2
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • $.ajax中的eval及dataType
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (4)事件处理——(7)简单事件(Simple events)
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (正则)提取页面里的img标签
  • (转)树状数组
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .Net中ListT 泛型转成DataTable、DataSet
  • /3GB和/USERVA开关
  • /etc/fstab 只读无法修改的解决办法
  • /var/spool/postfix/maildrop 下有大量文件