在一个QQ群里说起CDN,然后就提到很有名气的cloudflare,一个网友说这个CDN虽然有免费版,但是免费版本的CDN节点缓存并不同步。
我看到后一直有疑问,如果真是这样,节点缓存不同步,那这个CDN就只能相当于一个代理了,对于网站加速的效果就很小了。因为用户首次访问网页的过程是这样的:用户访问域名===》到CDN节点===》源站====>返回CDN节点====》返回给用户。
上面这个过程根本没法加速用户的访问速度,但正常的CDN,第一个用户访问了以后,CDN节点会保存这个返回到CDN节点的文件,包括HTML,JPG,JS,CSS等;并且CDN其它的众多节点也会同步保存这些文件内容,这样当其它用户访问时,CDN系统中离用户最近的节点就直接把内容返回给用户,速度就大大增加了。
但是怎么验证cloudflare免费版节点缓存到底同步不同步呢?
加了另外一个QQ群,群主告诉我一个办法:
用抓包软件抓包已经用了cloudflare的网站,在返回代码中,可以看到协议头里有标志:
1,MISS标志
如果CDN节点中没有缓存过这个节点,那么用户第一次访问时,在返回代码中,可以看到有”MISS”这个标志。
2,HIT标志
如果CDN节点中已经有了网页的缓存,那么多用户访问时,CDN节点会返回给用户文件,在协议头中,可以看到有“HIT”标志。
3,实验方法:
那么,如果CDN节点间的缓存是同步的,那可以先用一个IP打开一个页面,因为用户打开了一次,CDN节点会保存这个页面的缓存文件,那么第二次访问时,就应该有HIT标志了;并且如果节点间的缓存同步,那么其它地方的用户访问这个页面时,也应该可以看到HIT标志。
也是我就先用本地IP访问页面,然后抓包软件抓包:
如果此时,刷新页面,由于CDN节点里面有了缓存,那么抓包,可以看到HIT标志:
但此时代理IP到其它省份,由于省份不同,理论上,用的节点,应该会不同,那么我们来看抓包返回内容:
可以看到,返回的仍然是MISS标志,说明这个CDN节点并没有缓存这个内容。
结论:cloudflare免费版节点缓存不同步。
补充:那位网友说付费的CDN节点才是同步的。免费的可以洗洗睡了。
所有cdn工作原理都这样啊,没有哪家cdn会按照你说的一个拉取,全部节点都缓存,除非都是同一个节点假冒