通过近期对cdn的了解和研究,包括缓存未命中的问题,综合了一下,写成了这个cdn诊断小工具
您可以直接输入已经采用cdn加速的网址,可以帮您检测到是否开启了cdn缓存,cdn缓存时间,cdn是否命中
通过网址返回的response headers 可以帮您检测缓存未命中的可能原因
如果源站的http头部包含一些不缓存的信息,那么CDN”也许“会相应的继承源站发出的HTTP状态。
以下http响应头部信息都有可能导致您的cdn对源站的缓存
Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0,private 和 Pragma: no-cache
Pragma:no-cache
以下http响应头会被cdn对源站数据缓存
Cache-Control:max-age,public,直接设置一个数值(以秒为单位)
有一篇介绍HTTP缓存原理的文章,大家如果对cdn缓存原理不理解,可以看一下
程序也是根据检测文件头,来判断cdn未缓存源站数据的原因,其实通过上面提供的文件头,大家可以自己抓包排查
下面是抓包的一个本站图标的http返回文件头,大家可以看到完美命中
HTTP/1.1 200 OK Server: Tengine Content-Type: text/html; charset=utf-8 Connection: keep-alive Vary: Accept-Encoding Date: Sun, 10 Mar 2019 18:01:50 GMT Vary: Accept-Encoding Ali-Swift-Global-Savetime: 1552240910 Via: cache29.l2cm9[562,200-0,M], cache8.l2cm9[563,0], kunlun6.cn1587[0,200-0,H], kunlun6.cn1587[16,0] Age: 397715 X-Cache: HIT TCP_HIT dirn:0:507325517 X-Swift-SaveTime: Sun, 10 Mar 2019 18:01:50 GMT X-Swift-CacheTime: 2592000 Cache-Control: 604800 Timing-Allow-Origin: * EagleId: dd0f412415526386252751670e Content-Length: 62573
下面这个是缓存未命中的
HTTP/1.1 200 OK Server: Tengine Content-Type: application/javascript; charset=utf-8 Content-Length: 744 Connection: keep-alive Date: Fri, 15 Mar 2019 08:26:13 GMT Ali-Swift-Global-Savetime: 1552638373 Via: cache26.l2cm9[22,200-0,M], cache12.l2cm9[23,0], kunlun10.cn1587[94,200-0,M], kunlun6.cn1587[96,0] X-Cache: MISS TCP_MISS dirn:-2:-2 X-Swift-SaveTime: Fri, 15 Mar 2019 08:26:13 GMT X-Swift-CacheTime: 0 Timing-Allow-Origin: * EagleId: dd0f412415526383737976066e
程序诊断结果仅供参考!
如果网站CDN命中率低,将会导致cdn频繁回源,不但无法实现CDN加速,甚至出现“由于服务器和访客中间隔了一个CDN反而加载更慢”的现象,还会造成服务器的压力,同时也失去了cdn的真正优势
如果网站更新不频繁,强烈建议开启cdn缓存