web缓存
- 什么是web缓存:
- web缓存的好处:
- 减少网络带宽消耗
- 降低服务器压力
- 减少网络延迟,加快页面打开速度。
- 。。。。。
web缓存政策:
- 服务器缓存:
- CDN缓存
- 代理服务器缓存
- Combo服务
浏览器缓存
- http缓存机制:
- 本地缓存阶段
- Cache-COntrol
- Expires
- 协商缓存阶段
- Last-Modified&if-modified-since
- ETag&If-None-Match
- 本地缓存阶段
- http缓存机制:
HTML5缓存思路
- 离线存储manifest
- 本地存储localStorage
- 服务器缓存:
服务器缓存
CDN缓存
CDN缓存,也叫网关缓存、反向代理缓存。浏览器先向CDN网关发起WEB请求,网关服务器后面对应着一台或多台负载均衡源服务器,会根据它们的负载请求,动态地请求转发到合适的源服务器上。
####
启用CDN缓存后浏览器访问的全过程:
1.用户输入URL,浏览器将解析过后的域名发给DNS服务器
2.CDN返回该域名对应的CNAME,此时浏览器需要再次对获得的CNAME进行解析,才能得到CDN缓存服务器的IP地址。
在此过程中全局负载均衡DNS解析服务器会将用户的访问请求定位到离用户最近、负载最轻的CDN缓存服务器上。这种技术也被称为“DNS重定向”,
DNS服务器不是为每个请求返回相同的IP地址,比如在悉尼的一个客户请求解析www.cdn.com,DNS服务器根据地理位置,计算出距离这个用户最近的CDN服务器,于是返回一个悉尼CDN节点的IP地址。这种方法也不一定是最优的,因为地理位置上最近的两个点,延迟可能反而很高。
还有一种方法是通过估计节点间的样本延迟。
3.再次解析后,浏览器得到CDN缓存服务器的实际IP地址,向缓存服务器发起请求。
4.缓存服务器根据浏览器提供的域名,通过内部DNS解析得到此域名源服务器的真实IP地址,再由缓存服务器向该服务器发起访问请求。
5.缓存服务器拿到数据后,一方面将数据发回浏览器,另一方面进行本地保存,以备后用。之后再次访问,数据将从CDN缓存服务器中被返回。CDN不会永久保存数据,可以设置CDN的刷新频率,来达到数据的更新。
6.浏览器得到由缓存服务器发回的数据,并将其显示出来。至此,完成整个域名访问的过程。
上面相关CDN缓存原理的介绍转自:
文/苏星河(简书作者)
原文链接:http://www.jianshu.com/p/e086e7e9c82b
CDN缓存策略
CDN边缘节点缓存策略因服务商不同而不同,但一般都会遵循http标准协议,通过http响应头中的Cache-control: max-age的字段来设置CDN边缘节点数据缓存时间。
当客户端向CDN节点请求数据时,CDN节点会判断缓存数据是否过期,
- 若缓存数据并没有过期,则直接将缓存数据返回给客户端;
- 否则,CDN节点就会向源站发出回源请求(back to the source request),从源站拉取最新数据,更新本地缓存,并将最新数据返回给客户端。
CDN服务商一般会提供基于文件后缀、目录多个维度来指定CDN缓存时间,为用户提供更精细化的缓存管理。
CDN缓存时间会对“回源率”产生直接的影响。
- 若CDN缓存时间较短,CDN边缘节点上的数据会经常失效,导致频繁回源,增加了源站的负载,同时也增大的访问延时;
- 若CDN缓存时间太长,会带来数据更新时间慢的问题。开发者需要增对特定的业务,来做特定的数据缓存时间管理。
- CDN缓存刷新CDN边缘节点对开发者是透明的,相比于浏览器Ctrl+F5的强制刷新来使浏览器本地缓存失效,开发者可以通过CDN服务商提供的“刷新缓存”接口来达到清理CDN边缘节点缓存的目的。这样开发者在更新数据后,可以使用“刷新缓存”功能来强制CDN节点上的数据缓存过期,保证客户端在访问时,拉取到最新的数据。
CDN的优势
- CDN节点解决了跨运营商和跨地域访问的问题,访问延时大大降低;
大部分请求在CDN边缘节点完成,CDN起到了分流作用,减轻了源站的负载。
CDN缓存的缺点
- 当网站更新时,如果CDN节点上数据没有及时更新,即便用户再浏览器使用Ctrl +F5的方式使浏览器端的缓存失效,也会因为CDN边缘节点没有同步最新数据而导致用户访问异常。
CDN架构及原理参见CDN架构以及原理分析
CDN缓存原理
代理服务器缓存
代理服务器是浏览器和源服务器之间的中间服务器,浏览器先向这个中间服务器发起Web请求,经过处理后(比如权限验证,缓存匹配等),再将请求转发到源服务器。代理服务器缓存的运作原理跟浏览器的运作原理差不多,只是规模更大。可以把它理解为一个共享缓存,不只为一个用户服务,一般为大量用户提供服务,因此在减少相应时间和带宽使用方面很有效,同一个副本会被重用多次。常见代理服务器缓存解决方案有Squid等,这里不再详述。
Combo服务
Combo服务,也就是我们在最终拼接生成页面资源引用的时候,并不是生成多个独立的link标签,而是将资源地址拼接成一个url路径,请求一种线上的动态资源合并服务,从而实现减少HTTP请求的需求。
/??fle1,file2,file3,…的url请求响应就是动态combo服务提供的,它的原理很简单,就是根据url找到对应的多个文件,合并成一个文件来响应请求,并将其缓存,以加快访问速度。
但它也存在一些缺陷:
- 浏览器有url长度限制,因此不能无限制的合并资源。
- 如果用户在网站内有公共资源的两个页面间跳转访问,由于两个页面的combo的url不一样导致用户不能利用浏览器缓存来加快对公共资源的访问速度。如果combo的url中任何一个文件发生改变,都会导致整个url缓存失效,从而导致浏览器缓存利用率降低。
Combo其他资料服务
前端优化:淘宝的Combo Handler和新浪微博的link标签includes属性
资料参考: