Web缓存

Web缓存器( Web cache)也叫代理服务器(proxy server),它是能够代表初始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。可以配置用户的浏览器,使得用户的所有HTTP请求首先指向 Web缓存器。一旦某浏览器被配置,每个对某对象的浏览器请求首先被定向到该Web缓存器。举例来说,假设浏览器正在请求对象http://www. someschool. edu/campus.gif,将会发生如下情况:

  1. 浏览器建立一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求。
  2. Web缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web缓存器就向客户浏览器用HTTP响应报文返回该对象。
  3. 如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器(如www.someschool.
    edu)的TCP连接。Web缓存器则在这个缓存器到服务器的TCP连接上发送一个对该对象的HTTP请求。在收到该请求后,初始服务器向该Web缓存器发送具有该对象的HTTP响应。
  4. 当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP
    响应报文发送该副本(通过现有的客户浏览器和Web缓存器之间的TCP连接)。

值得注意的是Web缓存器是服务器同时又是客户。当它接收浏览器的请求并发回响应时,它是一个服务器。当它向服务器发出请求并接收响应时,它是一个客户。

在因特网上部署Web缓存器原因

  • Web缓存器可以大大减少对客户请求的响应时间,特别是当客户与服务器之间的瓶颈带宽远低于客户与Web缓存器之间的瓶颈带宽时更是如此。
  • 如我们马上用例子说明的那样,Web缓存器能够大大减少一个机构的接入链路到因特网的通信量。通过减少通信量,该机构(如一家公司或者一所大学)就不必急于增加带宽,因此降低了费用。此外,Web缓存器能从整体上大大减低因特网上的Web流量,从而改善了所有应用的性能。

尽管高速缓存能减少用户感受到的响应时间,但也引入了一个新的问题,即存放在缓存器中的对象副本可能是陈旧的。换句话说,保存在服务器中的对象自该副本缓存在客户上以后可能已经被修改了。幸运的是,HTTP协议有一种机制,允许缓存器证实它的对象是最新的。这种机制就是条件GET ( conditional GET)方法
如果:

  • 请求报文使用GET 方法;
  • 请求报文中包含一个“If-Modified-Since:”首部行(浏览器端缓存页面数据的最后修改时间)。

那么,这个HTTP请求报文就是一个条件GET请求报文。

GET方法的操作方式

我们看一个例子。首先,一个代理缓存器(proxycache)代表一个请求浏览器,向某 Web服务器发送一个请求报文:

GET /fruit/kiwi.gif HTTP/1.1
Host: www.exotiquecuisine.com

其次,该Web 服务器向缓存器发送具有被请求的对象的响应报文:

HTTP/1.1 200 OK
Date: Sat, 8 Oct 2011 15:39:29 Server: Apache/1.3.0 (unix)
Last-Modified: wed,7 sep 2011 09:23:24 Content-Type: image/gif
(data data data data data ...)

该缓存器在将对象转发到请求的浏览器的同时,也在本地缓存了该对象。重要的是,缓存器在存储该对象时也存储了最后修改日期。

一个星期后,另一个用户经过该缓存器请求同一个对象,该对象仍在这个缓存器中。由于在过去的一个星期中位于Web服务器上的该对象可能已经被修改了,该缓存器通过发送一个条件GET执行最新检查。具体说来,该缓存器发送:

GET /fruit/kiwi.gif HTTP/1.1 Host: www.exotiquecuisine.com
If-Modified-since: wed, 7 sep 2011 09:23:24

If-Modified-Since的值正好等于一星期前服务器发送的响应报文中的Last-Modified的值。该条件GET报文告诉服务器,只有指定日期之后该对象被修改过,才发送该对象。假设该对象自2011年9月7日09:23:24后没有被修改。接下来,Web服务器向该缓存器发送一个响应报文:

HTTP/1.1304 Not Modified
Date: sat,150 ct 2011 15:39:29 server: Apache/1.3.0 (Unix)
( empty entity body)

作为对该条件GET 方法的响应,该Web服务器仍发送一个响应报文,但并没有在该响应报文中包含所请求的对象。包含该对象只会浪费带宽,并增加用户感受到的响应时间。值得注意的是在最后的响应报文中,状态行中为304 Not Modified,它告诉缓存器可以使用该对象,能向请求的浏览器转发它缓存的该对象副本。

Web缓存(浏览器的缓存)相关推荐

  1. 浏览器缓存机制,强缓存,弱缓存

    目录 web缓存类型 浏览器缓存规则: 浏览器缓存的控制 cache-control总结 Expires Last-modified & If-modified-since Etag & ...

  2. 前端缓存/浏览器缓存机制

    前端缓存/浏览器缓存机制 1. 缓存过程分析 浏览器第一次向服务器发起该请求后拿到请求结果后,将请求结果和缓存标识存入浏览器缓存,浏览器对于缓存的处理是根据第一次请求资源时返回的响应头来确定的. 浏览 ...

  3. 浏览器缓存和CDN缓存基本介绍

    CDN是什么? 谈到CDN的作用,可以用8年买火车票的经历来形象比喻: 8年前,还没有火车票代售点一说,12306.cn更是无从说起.那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不通火 ...

  4. vue2知识点:浏览器本地缓存

    文章目录 3.21浏览器本地缓存 3.21.1localStorage 举例:写一个简单的针对本地存储增删改查的案例 3.21.2sessionStorage方法同localStorage一样 本人其 ...

  5. 不让html缓存图片吗,html – 如何强制Web浏览器不缓存图像

    背景 我正在为两个无偿网站编写和使用一个非常简单的基于CGI(Perl)的内容管理工具.它为网站管理员提供用于填充字段(日期,地点,标题,描述,链接等)并保存的事件的HTML表单.在该表单上,我允许管 ...

  6. 【Web缓存机制系列】2 – Web浏览器的缓存机制

    Web缓存的工作原理 所有的缓存都是基于一套规则来帮助他们决定什么时候使用缓存中的副本提供服务(假设有副本可用的情况下,未被销毁回收或者未被删除修改).这些规则有的在协议中有定义(如HTTP协议1.0 ...

  7. 微信H5、网页、内置Web浏览器 清理缓存,微信浏览器缓存

    目录 一.写在前面: 1.浏览器缓存带来的好处: 2.浏览器缓存带来的弊端: 二.如何清除微信浏览器的缓存: 1.在IOS环境下手动清除微信缓存: 2.在Android环境下手动清除微信缓存: 三.清 ...

  8. 前端web:浏览器静态资源缓存策略

    浏览器静态资源缓存策略 浏览器其实提供了两种控制策略,分别是强制缓存和协商缓存 强制缓存 强制缓存:就是强制使用浏览器缓存下来的资源; 在指定的一段时间内用自己缓存的文件就行,不需要再次发出请求. 具 ...

  9. Web前端_如何清除微信内置浏览器的缓存

    Android 清除微信内置浏览器缓存: 先点击这个链接 升级下浏览器的内核: debugmm.qq.com/?forcex5=true 在点击这个链接 : http://debugtbs.qq.co ...

最新文章

  1. Linux echo 显示内容颜色
  2. Linux下如何启用MySQL数据库远程访问
  3. pfx证书密码怎么查询_2019成考成绩查询时间通知!忘记账号和密码怎么办?
  4. 论文翻译:ImageNet Classification with Deep Convolutional nerual network
  5. 项目中的一个AOP的编写案例(配置+案例)
  6. ACM中Java使用总结
  7. JS对以对象组成的数组去重
  8. 【Spring-tx】AutoProxyRegistrar类
  9. vue搭配three.js创建3D旋转方块
  10. 单层石墨烯结构图matlab,CST中如何建立单层石墨烯模型
  11. windows memcached php扩展,Memcached 的学习:windows下php开memcached扩展
  12. html中css字体颜色设置,css样式字体设置宋体 css中font字体颜色怎么设置
  13. android 手机壁纸源码,Android设置手机壁纸-源码(WallPaper)
  14. android 取消蓝牙配对框 实现自动配对,Android 取消蓝牙配对框实现自动配对功能...
  15. 【解决笔记本电脑声音音量低的方法】
  16. 叠片式过滤器原理概述
  17. 尊敬的用户您好: 您访问的网站被机房安全管理系统拦截,可能是以下原因造成: 1.您
  18. java-操作 Excel
  19. github获取token
  20. arduino-超声波测距

热门文章

  1. 从数据库库索引说到空间数据索引
  2. 服务器php环境搭建教程,PHP服务端环境搭建图文详解
  3. ajax优缺点 工作原理
  4. 代码对比工具「for Mac」
  5. 算法时间复杂度、空间复杂度分析
  6. 项目总监/经理最重要的几项技能
  7. 根据word模板定制报表
  8. 详解机器学习中常见的距离与Python实现
  9. Git Your branch and 'origin/master' have diverged
  10. Python for...in...循环