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. 大型神经网络可能初具意识:OpenAI首席科学家引争议,众大佬吵成一团
  2. NSRunLoop概述(转)
  3. Sencha Touch 笔记
  4. mybatis_user_guide(6) Java API
  5. android照片编辑软件,照片编辑免费软件下载-照片编辑软件app下载 v7.45最新版_5577安卓网...
  6. JMeter - 如何创建可重用和模块化测试脚本
  7. ElasicSearch(3) 安装elasticsearch-head
  8. PHP: 在类(class)中加载动态函数, 变量函数或半变量函数 variable function/method
  9. 使用开源框架Sqlsugar结合mysql开发一个小demo
  10. 编译FriendlyDesktop的Uboot源码、内核,修改开机图片logo
  11. php实现先序、中序、后序遍历二叉树
  12. python-微信自动发送信息
  13. 学习进度总结----蔡强130201201
  14. 刘易斯拐点对中国经济的影响
  15. 3-arm裸机存储器控制器之SDRAM
  16. 潜藏在手机中的新威胁:免安装应用安全指北
  17. python ip地址转换_Python实现将IP地址转换为数字
  18. 生成Base64编码格式的二维码图片(添加url地址图片logo)
  19. 闽江学院计算机系微博,我校计控学子在第13届中国大学生计算机设计大赛中勇创佳绩...
  20. Redis geo计算距离

热门文章

  1. 使用eolinker接口返回结果入库
  2. Goby 漏洞更新 | 瑞友天翼应用虚拟化系统 index.php 文件远程代码执行漏洞
  3. 值得深读的书《寿命是自己一点一滴努力来的》(转)
  4. 刷爆力扣之检查数组对是否可以被 k 整除
  5. 腾讯云服务器部署python项目(阿里云通用)
  6. 不归零法编码、曼彻斯特编码和差分曼彻斯特编码
  7. 鼠标停止移动后指针消失
  8. 怎样在M1 Mac上安装iPhone或iPad应用程序?
  9. 想成为云计算大数据Spark高手,看这里!
  10. [附源码]Java计算机毕业设计SSM宠物销售管理系统