首页 java算法 web缓存的了解

web缓存的了解

什么是Web缓存,为什么要使用它? Web缓存游走于服务器和客户端之间。这个服务器可能是源服务器(资源所驻留的服务器Ad…

什么是Web缓存,为什么要使用它?

Web缓存游走于服务器和客户端之间。这个服务器可能是源服务器(资源所驻留的服务器Add),数量可能是1个或多个;这个客户端也可能是1个或多个。Web缓存就在服务器-客户端之间搞监控,监控请求,并且把请求输出的内容(例如html页面、 图片和文件)(统称为副本)另存一份;然后,如果下一个请求是相同的URL,则直接请求保存的副本,而不是再次麻烦源服务器。

web缓存的了解
web缓存的了解

使用缓存的原因

  • 降低延迟:缓存离客户端更近,因此,从缓存请求内容比从源服务器所用时间更少,呈现速度更快,网站就显得更灵敏。
  • 降低网络传输:副本被重复使用,大大降低了用户的带宽使用,其实也是一种变相的省钱(如果流量要付费的话),同时保证了带宽请求在一个低水平上,更容易维护了。

Web缓存的类型

1. 浏览器缓存

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

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

2.代理服务器缓存

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

由于代理服务器缓存并非客户端或者源服务器的一部分,而是处于网络中,请求需要以某种方式路由到它们。

3. 网关缓存

也被称为“反向代理缓存”或“替代缓存”。网关缓存同样是起中介作用的,不过不是(素不相识、不曾谋面的Add)网络管理员部署的,而多半是网站管理员(公司专门的运维工程师、或UED或程序组某人Add)他们自己部署,这样更容易扩展与维护。

cdn 和负载均衡就是这个应用

为什么要鼓励web缓存?

缓存可以让你的Web站点加载更快,

让你的服务器和互联网链接间负担更小。

访问速度更快

ps:代理和浏览器缓存都会被使用,缓存会导致在线用户获取的访问数据可能不是最新的

Web缓存如何工作

  1. 响应头明确说明,偶不想被缓存,则不会被缓存;
  2. 如果请求信息是需要认证或者安全加密的(如, HTTPS),相应内容也不会被缓存;
  3. 缓存如果有以下表现,则认为是fresh新鲜的(无需检查源服务器,直接发送给客户端):
  4. 含有完整的过期时间和寿命控制头信息,并且内容仍在保鲜期内,或者
  5. 缓存最近已展现,并且在不久前修改。
  6. 则内容缓存直取,绕过源服务器。
  7. 若内容陈旧,则会要求源服务器做验证 validate ,或者告诉缓存其拷贝副本是否是OK的。
  8. 特定情况下——例如,断网了,之前有过的响应缓存直取而不检查源服务器。

响应如果没有类似ETagLast-Modified头这样的校验器,也没有明确的更新信息,通常(并不绝对)认为是不可缓存的。

总而言之,新鲜度freshness校验validation是确定缓存内容是否可用的最重要途径。如果要展示的足够新,直接缓存取;如果检测发现展示内容并未变化,则不会再来一次完整的传输。

如何更好的使用缓存

  • 保持URL稳定:这是缓存的金科玉律,如果你为不同页面,不同用户或不同网站提供相同的内容,他们应该使用相同的URL. 这是简单却非常行之有效的方法。例如,你的HTML中的某个引用地址是”/index.html”, 则要一直使用这个地址。
  • 不同地方的图片和其他元素使用同一库
  • 对于不经常改变的图片/页面启用缓存,通过将Cache-Control: max-age头信息的值设大一点。
  • 对于定期更新的内容通过指定max-age或过期时间实现缓存。
  • 如果资源改变了(尤其下载文件),改变其名字。由于一般这种资源会有很长的过期时间,而服务器上一直是正确的版本;因此,链接这个下载资源的页面需要要比较短的过期时间(//zxx: 我司页面5分钟过期)。否则,会出现服务器的资源是新的,但页面被缓存了,其中的链接地址还是旧的,就会出现新旧版本冲突的可能Add
  • 万不得已不要变动文件:否则你要设置一个新的Last-Modified值。另外,当你更新站点的时候,只要上传改动的那些文件,而不要把整个站点都覆盖过去。
  • Cookie能不用就不用:Cookie难以被缓存,且大多情境下是没有必要的。如果你非得使用Cookie,建议用在动态页面上。
  • 减少SSL⑧的使用:因为共享缓存不能存储认证页面,只在必要的时候使用,并且在SSL页面上减少图片的使用。
  • 使用REDbot⑨检查你的网站:可以帮助你应用本文所介绍的一些概念。

缓存应用的地方

常用的、规模较大的内容(尤其图片)

免责声明:文章内容不代表本站立场,本站不对其内容的真实性、完整性、准确性给予任何担保、暗示和承诺,仅供读者参考,文章版权归原作者所有。如本文内容影响到您的合法权益(内容、图片等),请及时联系本站,我们会及时删除处理。

为您推荐

工作中java代码编写总结建议(持续更新)

工作中java代码编写总结建议(持续更新)

1.对于自己创建的每一个类,都考虑置入一个main(),其中包含了用于测试那个类的代码。 特别是帮助类的代码 2.每个名...
git简单学习(二)

git简单学习(二)

git 和svn有个区别就是暂存区 第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区; 第二步是...
小程序 wxss样式总结

小程序 wxss样式总结

display属性 none:此元素不会被显示 block:两个元素自动换行 inline:两个元素靠在一起 inher...
RedisDesktopManager 打开报0xc000007b程序错误

RedisDesktopManager 打开报0xc000007b程序错误

若发生这个问题,非常的简单,只要打开该软件的安装目录,双击运行下面的vcredist_x86.exe即可,这是由于在安装...
写好Java代码的30条经验总结

写好Java代码的30条经验总结

成为一个优秀的Java程序员,有着良好的代码编写习惯是必不可少的。下面就让我们来看看代码编写的30条建议吧。 (1) 类...
返回顶部