万千争宠-CDN案例篇
![](https://i-blog.csdnimg.cn/blog_migrate/ae66d3a1623607c897f2c76735a0ba4b.gif)
“六宫粉黛无颜色”,
![](https://i-blog.csdnimg.cn/blog_migrate/ae66d3a1623607c897f2c76735a0ba4b.gif)
“万千宠爱在一身”。
![](https://i-blog.csdnimg.cn/blog_migrate/ae66d3a1623607c897f2c76735a0ba4b.gif)
得不到CDN的宠爱,不妨给点颜色它瞧瞧!
![](https://i-blog.csdnimg.cn/blog_migrate/ae66d3a1623607c897f2c76735a0ba4b.gif)
URL中常常会带有“?”参数,通过“?”也许就可以做到
“?”的第一个作用,传递参数
我们一般请求的URL可能是这样的,http://www.abc.com/flower.png
拿到的图片是这样的
![](https://i-blog.csdnimg.cn/blog_migrate/30deaa23d533e3bb2e18fa2d7658580c.jpeg)
如果通过“?”传递参数,比如,http://www.abc.com/flower.png?color=yellow
就会得到小雏菊,给它点颜色就是这么来的
![](https://i-blog.csdnimg.cn/blog_migrate/4c58e8930b1620464f09ba93e3adf10e.jpeg)
“?”的第二个作用,对象独立缓存
每一个URL可以理解为一个对象,如jss、css、jpg,就好比是赵钱孙三人
这样一来,赵钱孙都能被CDN宠幸(缓存)
注:这里的赵钱孙都是标配的,即不带“?”参数
![](https://i-blog.csdnimg.cn/blog_migrate/f31c5e4533862f536c0a362150fe05f5.gif)
既然是对象,那自然就会有对象的属性或特征
如同上面的小白花变成小黄花,赵钱孙带上“?”后,摇身一变,就可以变成你想象的样子
相貌平平的赵变成了英姿飒爽的赵,穷困潦倒的钱变成了腰缠万贯的钱...
小编一直幻想着有这样的属性特征,然而贫穷确实限制了我的想象力
![](https://i-blog.csdnimg.cn/blog_migrate/9d215bd26c182730fb91d268940686d7.png)
案例回顾
![](https://i-blog.csdnimg.cn/blog_migrate/947b5ccd84ffc0c4a45149c96fbf5d71.png)
赵钱孙只是一个简单的例子
在实际操作中,对象之多、属性之复杂,CDN是怎么做到独立缓存的?
答案只有一个,就是设立一个Flag,即CDN为“?”后面的query string单独缓存
具体请看下面一则案例
![](https://i-blog.csdnimg.cn/blog_migrate/ada93d057081c5593ada4fab84083329.jpeg)
客户反馈某个域名出现窜号的情况
顾名思义,窜号就是A用户能访问到B用户的信息
![](https://i-blog.csdnimg.cn/blog_migrate/b2c575bbb320b2e6ebdc8db3774e2672.jpeg)
运营GG(编号001)迅速作出回应
小编感慨,运营GG每次响应都是做得那么潇洒和让人猝不及防
请记住咱们的运营GG(编号001),做事雷厉风行!
运营GG(编号002)为该域名设立一个Flag
这个Flag就是上面提到的,CDN为“?”后面的query string单独缓存
几个意思?就一个意思,CDN能为同一对象的不同属性单独缓存
拿赵钱孙这仨来说,CDN最初可能只缓存了这三位仁兄的标配版
http://www.abc.com/赵
http://www.abc.com/钱
http://www.abc.com/孙
哪天,赵变胖了、钱变穷了、孙变老了,此时CDN缓存的还是原来的赵钱孙
这是不合理的,客户的情况与之相似,大众访问到的内容都是标配版的赵钱孙,就出现了所谓的窜号
CDN应该根据对象的属性特征去做相应的缓存:设立Flag就能解决该问题,即CDN根据“?”后面的参数进行缓存
于是,CDN宠幸(缓存)的对象大致如下,包括3个标配版的赵钱孙,发福的赵、变穷的钱、年迈的孙
http://www.abc.com/赵
http://www.abc.com/钱
http://www.abc.com/孙
http://www.abc.com/赵?body=fat
http://www.abc.com/钱?money=little
http://www.abc.com/孙?age=old
![](https://i-blog.csdnimg.cn/blog_migrate/2c905ae509d01c525ebc8e4bd6d4eddc.jpeg)
至此,问题解决!
过程太短,解决问题太快
整个过程中,小编丝毫没感觉到客户有任何痛楚
最后,以一位海外技术的话来支持这次的案例分析
---如果CDN不为“?”后面的query string单独缓存,则缓存的内容只有对象的“首个且唯一”的副本
![](https://i-blog.csdnimg.cn/blog_migrate/52dc8224e46d118d4ba5addcd9b93e58.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8a666bd186fde2f2e9a5d92fa588ce56.png)
END
![](https://i-blog.csdnimg.cn/blog_migrate/372a94ad562d7c2fa09584e668ee8cad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bb28b6797108e4ece94be6e7c7e9bb23.png)