用了CDN缓存,就会跳过强缓存和协商缓存吗?
看了一下浏览器缓存,强缓存、协商缓存、CDN缓存。但他们的关系我有点迷糊。开启了用了CDN缓存,还会用到判断强缓存和协商缓存吗?大神们?
看了一下浏览器缓存,强缓存、协商缓存、CDN缓存。但他们的关系我有点迷糊。开启了用了CDN缓存,还会用到判断强缓存和协商缓存吗?大神们?
这个问题吧,我说点儿自己的理解,可能不是特别准确,但是希望对你有帮助。
简单讲的话,这个 CDN 缓存与强缓存和协商缓存本身是两码事。强缓存和协商缓存是指浏览器在加载一个静态资源时,决定缓存是否命中的策略类型,一般的过程如下:
而 CDN 缓存加速的原理是因为它会把资源缓存在节点上,这样访问某个资源时,直接访问 CDN 节点即可,不需要直接访问源站。你问题中指的是否跳过强缓存和协商缓存,这个是要看配置的。一般配置 CDN 的话,肯定都有管理控制台让你填一些参数的,比如内容、过期时间、权重等等,这些参数的意义在于,浏览器与 CDN 节点交互的时候,会根据这些参数以及你源站的配置来决定是直接返回缓存资源,还是将这个请求转发至源站(具体规则很复杂,你可以上网找文章详细了解一下),以让源站来决定返回什么样的资源,其中的过程也会包含上面一段所描述的强缓存与协商缓存的解析过程。
以上,个人拙见,大神轻喷。
5 回答8k 阅读✓ 已解决
4 回答11.1k 阅读
3 回答1.8k 阅读✓ 已解决
3 回答4k 阅读✓ 已解决
2 回答1.8k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
5 回答1.5k 阅读
附一张图
https://segmentfault.com/img/...
强缓存是直接使用本地缓存(根据Expires或者Cache-Control来判断),命中后直接从本地返回。没命中的话,带着Last-Modified或Etag和服务器确认,在确认的网络传输过程中可能会经过CDN服务器,CDN服务器如果本地有缓存,可以根据资源情况返回304(资源有效)或者200(客户端资源无效,返回CDN服务器本地资源),这个和终端服务器的逻辑是一致的。
Cache-Control中有两个属性和CDN服务器有关,
这3个概念并不冲突,强缓存是本地缓存,有效期内直接使用,失效后要去服务器验证下(就是你说的协商缓存),协商过程中可能经过CDN服务器,就出来了CDN缓存。所以无论你开不开CDN缓存,都不影响强缓存和协商缓存的逻辑