Web缓存(浏览器的缓存)

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,它告诉缓存器可以使用该对象,能向请求的浏览器转发它缓存的该对象副本。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值