做为前端er,辛辛苦苦搬完砖,好不容易上线以后,正准备告一声万事大吉,回家吃鸡。突然qa/pm/老板问,为何我这里仍是没有更新?只能是弱弱的回一声,清个缓存看看?或者还有那么一天,发现大部分区域都是好的,只有某些区域是旧的,这就要讨论一个叫CDN的东西了。html
说个最经典的结论,不管什么东西,传输都须要时间。这个应该都不会有疑问。
咱们的网络而言,有两个用户,一个在海角天边,一个就用内网坐在你跟前,你说他们的体验会不会有差异。这里就不说结论了,应该比较清晰。
关键在于如何解决这个问题,最理想化的,海角天边的跟前要是也有个相同服务器不就完了。
就是这么朴素的道理,这样就引出了CDN。前端
CDN的全称是Content Delivery Network,即内容分发网络。
可以实时地根据网络流量和各节点的链接、负载情况以及到用户的距离和响应时间等综合信息将用户的请求从新导向离用户最近的服务节点上。
已达到一下三点:segmentfault
从技术上全面解决因为网络带宽小、用户访问量大、网点分布不均等缘由,解决用户访问网站的响应速度慢的根本缘由。浏览器
在看CDN如何解决以前,先回头看下经典的问题,用户输入url回车以后会发生什么。
对于未使用CDN以前,以下图所示:
注:本图来源见水印,比较经典的图就不本身瞎画了
大概有这么几个步骤:缓存
这样来看,有这么几个地方须要考虑:
请求直接到达服务器上,存在传输距离的问题。
每次直接请求服务器,响应速度能够优化。
流量直接打到服务器上,存在超负荷的可能。安全
引入cdn以后整个流程以下:
服务器
提供内容的原始站点,也就是咱们的服务器网络
包括CDN网管中心和全局负载均衡DNS重定向解析系统,负责整个CDN网络的分发及管理。
主要做为内容分发和边缘未命中时的服务点负载均衡
主要指异地分发节点,由负载均衡设备、高速缓存服务器两部分组成。
简单归纳就是离用户最近的节点。主要做为直接向用户提供服务的节点。运维
CDN边缘节点缓存策略因服务商不一样而不一样,但通常都会遵循http标准协议,经过http响应头中的 Cache-control: max-age的字段来设置CDN边缘节点数据缓存时间。
当用户向CDN发出请求时,CDN阶段会判断资源是否过时,未过时直接使用缓存(这也就提高了响应速度)。若是认为资源过时,那么就会向实际服务器去请求新的资源,即发生回源。
CDN从源站获取最新资源的过程即为回源,该过程会同时更新本地缓存资源,并将新的资源返回给用户。
固然对于回源咱们是要不推荐的,搭建CDN除了必要状况下,固然但愿都走节点缓存。若是回源率太高能够参考这里看看CDN 命中率、回源率常见问题
对于新资源上线,为了确保全部节点都能访问最新资源,须要主动失效CDN缓存。CDN运营商都会暴露主动刷新的接口,通常公司运维也会暴露出刷新CDN的接口的,已解决CDN缓存不主动更新问题。
什么叫流量劫持,比较笼统的说只要是对请求及数据进行篡改、转发的均可以认为是流量劫持。
其实CDN也是一种流量劫持,其经过DNS解析将域名匹配到最近的服务器上。
不过这是一种主动已知的劫持,目的为更好的用户体验。
恶意的劫持通常分为两类:
又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围之外的请求放行,不然返回假的IP地址或者什么都不作使请求失去响应,其效果就是对特定的网络不能反应或访问的是假网址。
常见实现也是经过污染路由器等中间链路,将解析请求进行篡改。
数据劫持是指针对明文传输的内容发生。
用户发起HTTP请求,服务器返回页面内容时,通过中间的运营商网络,页面内容被篡改或加塞内容,强行插入弹窗或者广告。
如何预防?
行业内解决的办法便是对内容进行HTTPS加密,实现密文传输,完全避免劫持问题。
理想状况下,CDN 的安全性应该和咱们的服务器一致,但若是,CDN 和用户之间、CDN服务器之间,走明文的htttp协议也是会出现数据劫持的现象。
http://book.51cto.com/art/201205/338756.htm
https://www.zhihu.com/question/36514327?rf=37353035
http://hpoenixf.com/DNS%E4%B8%8ECDN%E7%9F%A5%E8%AF%86%E6%B1%87%E6%80%BB.html
http://www.javashuo.com/article/p-yalzugfo-gs.html
https://zhuanlan.zhihu.com/p/40682772 本着学习的态度,从上面各类大神的文章中受益不浅,再次感谢上述文章做者。汇总一下做为本身的解惑笔记,但愿也能对其余人有所帮助。