Web前端资源使用CDN加速,资源的读取和更新该怎么处理

发布于 2022-09-04 13:20:01 字数 173 浏览 26 评论 0

  • 像CSS、JS、img以及静态HTML等资源文件,如果需要放到CDN服务器上

  • 这些资源的路径就不能写死IP,只能写域名

  • CDN缓存如何通过域名来获取到相应的资源文件?

  • 资源的更新机制又该如何设计?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

假装不在乎 2022-09-11 13:20:01

我说一个简单的CDN实现方式,BIND(DNS)的viewvarnish(具有反向代理功能的缓存应用) 实现的CDN缓存。
当 Client 发起对 www.test.com 的DNS解析的时候。www.test.comDNS服务器可以通过view来实现不同的网段解析出不同的IP。而这个IP指向的是 Varnish Cache Server
Varnish 可以通过反向代理将用户请求代理到 原始服务器。而它在代理的时候,就需要指明后端backend server(原始服务器),可以是一个或者多个,多个可以组成组,组可以用多种调度算法进行调度。而varnish自身有很强的缓存机制。可以通过配置其vcl来控制其缓存策略。这样访问到达,缓存有且没有过期。且client 请求报文首部中没有Cache-Control: no-cache,它就可以直接从缓存中拿数据进行响应。
1、CDN缓存如何通过域名来获取到相应的资源文件?
答:CDN缓存自己使用IP进行调度。写域名最主要的原因是解析到缓存服务器。而CDN服务商运行的缓存服务器上面有很多站点的缓存。你不指定域名,谁知道你要命中的 index.html 之类的资源是哪个站点的。
2、资源更新
答:资源更新一般是通过http首部进行控制。

`http 1.0` 是通过: `Expires首部` 。现在打开 `Chrome` 或者 `firefox` 的调试功能就可以看到
`Expires: Thu, 19 Nov 1981 08:52:00 GMT`
这个首部表示该缓存的有效期限。如果Client的时间不对的话。。。。。所以主流控制不是它。

`HTTP 1.1` 是通过 `Cache-Control` 进行控制
Cache-Control:
    请求:
        no-cache(不要缓存的实体,要求现在从WEB服务器去取) 
        max-age:(只接受 Age 值小于 max-age 值,并且没有过期的对象) 
        max-stale:(可以接受过去的对象,但是过期时间必须小于 max-stale 值) 
        min-fresh:(接受其新鲜生命期大于其当前 Age 跟 min-fresh 值之和的缓存对象) 
    响应:
        public(可以用 Cached 内容回应任何用户) 
        private(只能用缓存内容回应先前请求该内容的那个用户) 
        no-cache(可以缓存,但是只有在跟WEB服务器验证了其有效后,才能返回给客户端) 
        max-age:(本响应包含的对象的过期时间) 
        ALL: no-store(不允许缓存)
        must-revalidate  告诉缓存服务器,每次使用缓存的时候都必须去原始服务器上面做有效性验证

还有一种控制策略:`ETag: "3bf53-548a2478edc80"`
这个`ETag`基本相当于版本的意思,如果`ETag` 
好了,我自己也有点糊涂了。
说重点,控制更新是 
    先判断缓存时长,如果没有过期。就直接使用
        Cache-Control: max-age=300
    如果过期,就去后端询问是否改变。
        ETag + If-None-Match

给你一张varnishstate engine图。

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文