web缓存知识整理

1.缓存的分类:

缓存分为服务侧和客户端侧。

服务端缓存又分为代理服务器缓存和反向代理服务器缓存(也叫网关缓存,比如Nginx反向代理、Squid等),其实广泛使用的CDN也是一种服务器缓存,目的是让用户的请求走“捷径”,并且都是缓存图片、文件等静态资源。

客户端侧缓存一般指浏览器缓存,目的是加速各种静态资源的访问,如现在大型的网站,随便一个页面请求都是一两百个请求,如果没有缓存,用户体验会急剧下降、同时服务器压力和网络带宽都面临着严重的考验。

2.使用缓存的原因:

  • 降低延迟:缓存离客户端更近,因此,从缓存请求的内容比从源服务器所用时间少,呈现速度快,网络就显得更灵敏。
  • 降低网络传输:副本被重复使用,大大降低了用户的带宽使用,同时保证了带宽请求在一个低水平上,更容易维护了。
下来我们从缓存的分类具体谈谈

浏览器缓存
在任何现代浏览器上(IE FireFox  Chrom)清除浏览数据的对话框中可以看到“缓存”这个设置项。

                                    
浏览器会在你的硬盘上专门开辟一个空间为你存储资源副本,浏览器缓存的工作规则很简单:检查以确保副本是最新的,通常只要一次会话(就是当前浏览器调用的这次)

浏览器缓存在用户触发“后退”操作或点击一个之前看过的链接的时候很管用。同样,如果你在网站上访问同一张图片,该图片可以从浏览器缓存中调出几乎立即显现出来。

代理服务器缓存
Web代理服务器使用同样的缓存原理,则是规模更大。代理以同样的方式服务千万用户,大公司和ISP(Internet Server Provider ,Internet服务提供商)经常在他们的防火墙或者单独的设备(也称中介)上架设代理缓存。

由于代理服务器缓存并非客户端或者源服务器的一部分,而是处于网络中,请求需要以某种方式路由到它们。一种方法是手动设置,告诉浏览器你常用的代理服务器(翻墙的时候常用),另外就是拦截。拦截代理把web请求根据自己的底层网络重定向。因此,客户端无需配置,甚至都不需要知道它们。

代理缓存属于一种共享缓存;往往有大量用户使用,因此,其在降低延时和网络流量上很有用,毕竟每个副本都被大量重用。

网关缓存:
网关缓存同样是起中介作用的,不过不是网络管理员部署的,而多半是网站管理员他们自己部署,这样更容易扩展与维护。

可以有很多方法把请求路由到网关缓存,但通常使用某种形式的负载均衡器,使它们中的一个或多个看起来像是源服务器。内容分发网络为整个网络分配网关缓存,然后把这些缓存卖给需要的网站。

说到这里,我想我得解释两个专业名词:
负载均衡器:是一种采用各种分配算法把网络请求分散到一个服务器集群中的可用服务器上去,通过管理进入的Web数据流量和增加有效的网络带宽,从而使网络访问者获得尽可能最佳的联网体验的硬件设备。
内容分发网络:即CDN,基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接,负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需的内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。

3.如何控制缓存和不缓存:

HTML Meta标签:
HTML重构人员可以在文档的<head>中添加标签进行描述,这些Meta标签通常用来标记不可缓存或过期时间
Meta标签使用简单,但效果一般。因为只被少数几个浏览器支持,而代理缓存基本上就不访问HTML文档。

Expires HTTP头信息控制不过期:
Expires HTTP头是控制缓存的基本手段,Expires的中文意思是“有效期”,显然,就是告诉浏览器缓存的有效期。如果过期,缓存会检查源服务器以确定文件是否改变了。

大部分的服务器允许你以多种方式设置Expires响应头。通常,他们允许设置一个绝对过期时间,然后对此最后一次访问的时候或者最后一次文档修改的时候决定客户端内容的获取方式。

对于静态图片(如导航或按钮的图片)而言,Expires头信息是相当有用的,因为图片不怎么修改,你可以给图片设置一个绝对过期时间,这回让你的用户感觉网站变快了。Expires对于控制有改变规律的网页也很有用,例如:你有一个新闻聚合页面,每天早上6点钟准时更新,你可以设置缓存的过期时间,于是缓存就可以很聪明的知道什么时候可以去重载新的内容。

注意:时间是格林威治时间(GMT),而不是本地时间。
Expires: Fri, 12 Agt 2016 18:45:21 GMT

尽管Expires头很有用,但它有一定的局限性。首先,因为牵扯到时间,Web服务器端的时间必须和缓存同步,否则很可能实现不了预期的结果。另一个问题是,你很容易忘记某内容设置了一个特定时间,如果返回内容的时候没有更新这个时间,则请求都是上访到服务器,反而增加了负载和响应时间。

Cache-Control(缓存控制)HTTP头信息:
HTTP1.1引入了新的头信息 Cache-Control     响应头信息,让网站的发布者可以更全面的控制他们的内容,更好的处理Expires这些限制, Cache-Control 响应头包括:
  • max-age=[秒]:表示在这个时间范围内缓存是新鲜的无需更新。类似Expires时间,不过这个时间是相对的,而不是绝对的,也就是某次请求成功后多少秒内缓存是新鲜的。
  • s-maxage=[秒]:类似上面的max-age,除了仅应用与共享缓存。
  • public : 标记认证的响应才能被缓存。一般而言,需要认证HTTP请求内容会自动私有化。(不会被缓存)
  • private:允许缓存专门为某一个用户存储响应,比方在浏览器中。
  • no-cache:每次在释放缓存副本之前都强制发送请求给服务器进行验证,这在确保认证上很管用(和public结合使用)或者保证内容是即时的。
  • no-store:强制缓存在任何时候都不要保留副本。
  • must-revalidate:告诉缓存,我给你准备了新鲜度的信息,在表现的时候要严格遵循,HTTP允许缓存在某些特定情况下返回过期数据,指定了这个属性,相当于告诉缓存,你必须严格遵守我的规则。
  • proxy-revalidate:类似must-revalidate,除了只能应用于代理缓存。
4.创建支持缓存网站的小技巧:
  • 保持URL稳定:如果你为不同的网站提供不同的页面,不同用户或不同网站提供相同的内容,他们应该使用相同的URL,这是简单却非常行之有效的方法。
  • 不同地方的图片和其他元素使用同一库。
  • 对于不经常改变的图片/页面启用缓存,通过将Cache-Control: max-age头信息的值设置大一些。
  • 对于定期更新的内容通过指定max-age或过期时间实现缓存。
  • 如果资源改变了(尤其下载文件),改变其名字。由于一般这种资源会有较长的过期时间,而服务器上一直是正确版本;因此,链接这个下载资源的页面需要比较短的时间。否则,会出现服务器资源是新的,但页面被缓存了,其中的链接地址还是旧的,就会出现新旧版本冲突的可能。
  • 万不得已不要变动文件:否则你要设置一个新的Last-Modified值。另外,当你更新站点时,只要上传改动的那些文件,而不要把整个站点都覆盖过去。
  • Cookie能不用就不用:Cookie难以被缓存,且大多数情况下是没有必要的。如果非得用Cookie,建议在动态页面上。
  • 减少SSL的使用:因为共享缓存不能存储认证页面,只在必要的时候使用,并且在SSL页面上减少图片的使用。
SSL:全称Secure Socket Layer ——安全套接层,为Netscape所研发,用以保障在Internet上数据传输的安全,利用数据加密技术,可确保数据在网络之上传输过程中不会被截取及窃听。目前一般通用的规格为40bit的安全标准,美国则已推出128bit的安全标准。只要3.0以上的浏览器版本以上的IE或者Netscape浏览器即可支持SSL。
 
5.需要注意的小技巧:
  • 不要使用POST:若是获取数据,尽量不要使用POST模式,因为POST方式返回内容大部分不会被缓存,相对的,通过GET以路径和查询发送的信息被缓存存储下来供后续使用。
  • URL地址中不要嵌入特定的用户信息:除非生成的内容对于客而言是唯一的。
  • 不要指望同一用户的所有请求都来自同一主机:因为缓存经常协同合作。(这块不太理解,望大神赐教)
  • 生成Content-Length头信息:可让你的脚步以持久连接形式响应。这允许客户端在一个TCP/IP请求上请求多个内容,而不是为每次连接单独建立连接,这样你的网站响应会快很多。
Content-Length:指明实体正文的长度,以字节的方式存储的十进制数字来表示。
在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一起发给客户端。

感觉这块水挺深,很多内容还有待我进一步学习,这次先和大家讨论到这里,如有理解不当之处,还望指出!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值