This website requires JavaScript.

两个有关于 CDN 的问题

2019.04.21 11:24 字数 1290 阅读 400 喜欢 11 评论 4

先简单介绍一下 CDN

CDN 的概念比较简单,将源站内容分发至最接近用户的节点,使用户可就近取得所需内容,提高用户访问的响应速度和成功率。可以简单的理解为京东的物流仓储,如果你在京东上买自营产品,它会根据收获地点,使用在全国范围内离我们最近、送达最快的仓库,因此我们的收获时间会大大减少。

所以,使用 CDN 最重要的益处即是:加速网站的访问

此外,还一个非常明显的优点:它能减轻源站的负载,扛住 DDOS 攻击(请求到了 CDN 服务器)。

CDN 的访问原理可以简单的理解为:DNS 将域名解析的权利交给了 CDN(也就是我们平常在阿里云,腾讯云设置的 CNAME),然后 CDN 会返回一个最快节点的 IP,让我们向这个 IP 发出请求。

至于架设原理,不在本文的讨论范围内,也就不说了(其实我也不知道)。

接下来,来看看我遇到的两个问题。

CDN 域名与主站域名不相同的原因

如果你打开我的 BLOG 你会发现我使用的 CDN 是二级域名,即是 https://cdn.jkchao.cn ;

还有一些 CDN 的域名与主域名相同。

两种方式应该都是不正确的。

如果你有意留意到如天猫,京东等网站的静态资源域名,你会发现与主域名不相同。

如天猫上,主站是 https://www.tmall.com , JavaScript 文件: https://g.alicdn.com/xxx

如果主域名与 CDN 域名相同,你需要对不同类型的文件设置不同的 cache 规则,比如说网站的 logo,设置十年,某些 JavaScript 文件设置时间为一年。但是这样就不利于 CDN 的最大优势了。如果将静态元素抽取出来,就可以很方便的对所有静态元素部署规则,而不用考虑动态请求。减少规则的条数可以提升 cdn 的效率。

除此之外,由于 CDN 与网站的域名相同,在请求时会带上无用 cookie(如果有),会浪费带宽。

如果 CDN 域名使用的是二级域名方式,该问题点在于,请求静态资源也会带上 cookie:

因为在通常境况下,写 cookie 的时候,会写在根域下(如:ccc.com),因此其子域(a.ccc.con、cdn.ccc.com)都会带上 cookie。

CDN 节点问题

最近遇到一个问题,问题简单描述如下:不同地方的用户要访问你的同一个 html,但是内容部分(js)不同,怎么实现?

我当时给出最直接的答案是:Nodejs 判断来源,渲染不同的 JavaScript(页面已经是服务端渲染)。

此外有人给出利用 CDN 节点,如果我没理解错,实现的方式是 html 中请求的静态文件的域名是相同的,然后解析成 IP,请求 CDN 服务器时,返回的文件不同。但是具体要怎么实现,好像并不是一件容易的事(在网站找了一圈,没找到解决方式)。

挖坑,待解决....

赞赏支持

微信

支付宝

相关推荐

暂无推荐文章