web缓存(一)-服务器缓存

web缓存

  • 什么是web缓存:
    • Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。

      本篇只着重介绍服务器缓存

  • web缓存的好处:
    • 减少网络带宽消耗
    • 降低服务器压力
    • 减少网络延迟,加快页面打开速度。
    • 。。。。。
  • web缓存政策:

    • 服务器缓存:
      • CDN缓存
      • 代理服务器缓存
      • Combo服务
    • 浏览器缓存

      • http缓存机制:
        • 本地缓存阶段
          • Cache-COntrol
          • Expires
        • 协商缓存阶段
          • Last-Modified&if-modified-since
          • ETag&If-None-Match
    • 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属性

资料参考: