《HTTP权威指南》读书笔记-缓存

概述

Web缓存可以自动保存常见文档副本的HTTP设备。当Web请求抵达缓存时,如果本地有“已缓存的”副本,就从本地存储设备而不是原始服务器中提取这个文档。

使用缓存的优点

  1. 减少了冗余的数据传输
  2. 缓解了网络的瓶颈的问题(不许更多的的带宽就能更快加载)
  3. 降低了对原始服务器的要求
  4. 降低了距离时延

冗余的数据传输

1.多名用户访问原始服务器页面时,服务器会多次传输同一份文档,相同的字节会在网络中一遍遍地传输。有了缓存,就可以保留第一条服务器响应的副本,后继请求就可以由缓存的副本来应对了。

2.因为缓存放在了离计算机附后近的机房,可以让客户端更快得到一份副本。

“命中和未命中”

缓存命中(cache hit):可以用已有的副本为某些到达缓存的请求提供服务。

缓存未命中(cache miss):没有副本可用,而被转发到原始服务器。

再验证

原始服务器的内容可能会发生变化,缓存要不时的对其进行检测,看看保存的副本是否为最新的。“新鲜度检测”被称为HTTP再验证(revalidation)。为了有效的验证,HTTP定义了一些特殊的请求,不要用从服务器获取整个对象,就可以快速检测出内容是否为最新。

由于缓存中通常会包含数百万文档,而且网络宽带比较珍贵,所以大部分缓存只有客户端发起请求,并且副本旧的足以需要检测时,才会再验证。

缓存对缓存的副本进行再验证时,会向服务器发送一个小的再验证请求。若缓存副本仍然有效,副本就会被标志成是新鲜的,并将副本提供给客户端,这称为再验证命中(revalidate hit)。通常会用If-Modified-Since首部来验证,把它添加到GET请求中去,就可以告诉服务器。

下面列出响应报文中可能出现的三种情况(内容未修改、内容被修改、内容被删除):

  • 再验证命中

如果服务器对象未被修改,服务器会向客户端发送一个小的HTTP 304 Not Modified响应。

  • 再验证未命中

如果服务器对象与已缓存副本不同,服务器向客户端发送一条普通的,带有完整内容的HTTP 200 OK响应。

  • 对象被删除

如果服务器对象已经被删除了,服务器就会送一个 404 Not Found响应,缓存也会将其副本删除。

区分命中和未命中的情况

HTTP没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的。这两种情况返回的都是200 OK

客户端有一种方法能判断响应是否来自缓存,就是使用Date首部。将响应中Date首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为是来自缓存的;客户端也可以通过Age首部来检测缓存的响应,通过这个首部可以分辨出这条响应的使用期。否则,则认为是来自原始服务器中的。

两种缓存

私有缓存

Web浏览器中有内建的私有缓存,大多数浏览器会将常用文档缓存在你个人电脑的磁盘和内存中,并且允许用户去配置缓存的大小和各种设置。还可以看浏览器的缓存中有什么内容。

私有缓存不需要很大的动力或存储空间。

公有代理缓存

公有代理缓存是特殊的共享代理服务器,被称为缓存代理服务器(caching proxy server),或称为代理缓存(proxy cache)。代理缓存会从本地缓存中提取文档,或者代表用户与服务器进行联系。公有缓存会接受来自多个用户的访问,所以通过他可以更好地减少冗余流量。

缓存的处理步骤

对一条HTTP GET报文的基本缓存处理过程包括7个步骤

  1. 接受——缓存从网络中读取抵达的请求报文。
  2. 解析——缓存对报文进行解析,提取出URL和各种首部。
  3. 查询——缓存查看是否有本地副本可用,如果没有,就获取一份副本并保存在本地。
  4. 新鲜度检测——缓存查看已缓存副本是否足够新鲜,如果不是,就询问服务器是否有任何更新。
  5. 创建响应——缓存会用新的首部和已缓存的主体来构建一条响应报文。
  6. 发送——缓存通过网络将响应发回给客户端。
  7. 日志——缓存可选地创建一个日志文件条目来描述这个事务。

保持副本的新鲜

文档过期

通过特殊的HTTP Cache-Control和Expires首部,HTTP让原始服务器向每个文档附加一个“过期日期”。

[plain] view plaincopy

  1. Expires:Fri, 05, Jan 2012, 01:31:39 GMT
  2. Cache-Control: max-age=439293

Expires与Cache-Control

    Expries:指定一个绝对过期日期。如果过期日期已经过了,就说明文档不再新鲜了。

Expires首部和Cache-Control:max-age首部所做的事情本质上是一样的,但是Cache-Control首部使用的是相对时间而不是绝对日期(Expires使用绝对的过期日期),所以我们更倾向于使用比较新的Cache-Control首部,绝对日期依赖于计算机时钟的正确设置。

Cache-Control:max-age:max-age值定义了文档的最大使用期——从第一次生成文档到文档不再新鲜,无法使用为止,最大的合法生存时间(以秒为单位)。

服务器再验证

仅仅是已缓存文档过期了并不意味着它和原始服务器上目前处理活跃状态的文档有实际区别,这只是意味着到了要进行审核的时间了。这种情况被称为“服务器再验证”,说明缓存需要询问服务器文档是否发生了变化。

1)如果内容发生变化,缓存会获取一份新的文档副本,并将其存储在旧文档的位置上,然后将文档发送给客户端。

2)如果内容没有变化,缓存只需要获取新的首部,包括一个新的过期日期,并对缓存中的首部进行更新就行了。

用条件方法进行再验证

对于缓存再验证来说最有用的2个首部是(If-Modified-Since、If-Unmodified-Since)[对应于Last-Modified]和(If-None-Match、If-Match)[对应于ETag]

If-Modified-Since:如果从指定日期之后文档被修改过了,就执行请求的方法。可以与Last-Modified服务器响应首部配合使用,只有在内容被修改后与已缓存版本有所不同的时候才去获取内容。

If-None-Match:服务器可以为文档提供特殊的标签(Etag,版本标识符),而不是将其与最近修改日期相匹配,这些标签就像序列号一样。如果已缓存标签与服务器文档中标签有所不同,If-None-Match首部就会执行所请求的方法。

服务端与客户端控制缓存的能力

可以通过HTTP定义的几种方式来指定文档的过期策略

Cache-Control:no-store

Cache-Control:no-cache

Cache-Control:max-age

时间: 2024-11-07 05:49:30

《HTTP权威指南》读书笔记-缓存的相关文章

Hadoop权威指南读书笔记

本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系统. MapReduce:分布式数据处理模型和执行环境,运行于大型商业集群. HDFS:分布式文件系统,运行于大型商用机集群. Pig:一种数据流语言和运行环境,用以检索非常大的数据集.Pig运行在MapReduce和HDFS的集群上. Hive:一个分布式.按列存储的数据仓库.Hive管理HDFS

IDA.Pro权威指南 读书笔记

http://www.pediy.com/kssd/pediy12/142766.html 标 题:IDA.Pro权威指南 读书笔记[Made By C_lemon] 作 者:Dstlemoner 时 间:2011-11-14 11:56:17 链 接:http://bbs.pediy.com/showthread.php?t=142766    IDA为反汇编 和逆向破解的 静态分析利器 ! 虽然是利器,但是你不会用的话~那就另当别论了. →     唉.对于刚入门的新手来说,看前人走过的路程

Android编程权威指南-读书笔记(二)-第一个小程序

Android编程权威指南-读书笔记(二) -第一个小程序 第一个例子介绍 应用名为GeoQuiz.用户通过单击True或False按钮来回答屏幕上的问题,GeoQuiz可即时反馈答案正确与否. 这个例子为我们简单介绍了几个基本组件的使用,以及基本的事件监听.让我们对基本组件的使用和事件的监听有一个基本的了解. 这篇文章分为2个部分,第一部分就是创建简单的UI.第二个部分就是对这个UI增加代码来响应一些操作. (注:所有不明白或者不理解的东西其实都不重要,后面都会有更详细的介绍.) 本章的目标

css权威指南 读书笔记

网上看见推荐的书总是喜欢买回家,但是大多数时候都不会立即就看,都是在书橱里蒙上了一层灰尘.从毕业到现在,由于公司业务原因,写js多余css,所以就想系统地看看css,并且做一些练习,于是就开始看<css权威指南>,看到了第六章,初步感觉,对于工作一年的我来说,很简单,当然也有一些我不熟悉的知识点,于是整理了下来. 一.@import 1.放在style容器中,且在其他css规则之前 2.每个人@import指令的样式都会加载使用 二.选择器 1.:first-letter 用于选取指定选择器的

HTTP权威指南读书笔记

1.8 web组件结构: 代理 :位于客户端和服务器之间的HTTP中间实体 缓存 :HTTP的仓库,使常用页面的副本可以保存在离客户端很近的地方 网关 :链接其他应用程序的特殊web服务器(如邮件服务) 隧道 :对HTTP通信报文进行盲转的特殊代理 Agent代理:发起自动HTTP请求的半智能web客户端 1.8.1 代理: 原理:代理存在与客户端与服务器之间,接受客户端的HTTP请求并且转发给服务器 1.8.2 缓存: 原理:web缓存是一种特殊的HTTP代理服务器,可以将经过代理传送的常用文

Http权威指南---读书笔记

Chart1 ====概述==== 最简单的的资源是web服务器文件系统中的静态文件.当然可以上动态,但要经过网关?(不确定) 下面见图: 2.  URI(uniform Resource Identifier) 同一资源标识符:类比邮政地址 URI可以有两种格式 1.URL(同一资源定位符) 2.URN (1) URL:分为三个部分,1.协议(http://)2.地址(www.baidu.com)3.特定资源:/1.pic (2) URN:开发阶段  3.  常见的HTTP方法: 4.  协议

JS权威指南读书笔记(七)

第十七章 事件处理 1 客户端JS程序采用了异步事件驱动编程模型. 2 关于事件的重要定义 a 事件类型(event type) b 事件目标(event target) target === srcElement(IE8及之前版本) c 事件处理程序(event handler ) 当对象上注册的事件处理程序被调用时,可以说浏览器触发(fire trigger)和派发(dispatch)了事件: d 事件对象(event object) e 事件传播(event propagation)两种形

HTML5权威指南读书笔记【第五部分】

1.Ajax简单获取网页内容的示例: function handleButtonPress(e) { var httpRequest = new XMLHttpRequest(); httpRequest.onreadystatechange = handleResponse; httpRequest.open("GET", e.target.innerHTML + ".html"); //httpRequest.open("GET", e.ta

HBase权威指南读书笔记(一)

第一章HBase简介 1.  HBase即hadoop数据库,HBase是一个分布式的.持久的.强一致性的存储系统,具有近似最优的写性能和出色的读性能. 2.  HBase并不是一个列式存储的数据库,但它利用了磁盘上的列式存储格式.传统的列式存储数据库适合实时存取数据的场景,HBase适合键值对的数据存储,或者有序的数据存储. 3.  一行由若干列组成,若干列又构成了一个列族(column family).列族数量只限于几十,实际上更少.而列的数量没有限制,一个列族里面可以有数百万个列,列值也没

JavaScript权威指南读书笔记【第一章】

第一章 JavaScript概述 前端三大技能: HTML: 描述网页内容 CSS: 描述网页样式 JavaScript: 描述网页行为 特点:动态.弱类型.适合面向对象和函数式编程的风格 语法源自Java 一等函数来自Scheme 基于原型的继承来自于Self 名字和版本: JavaScript是由网景(Netscape)公司创建,“JavaScript”是Sun MicroSystem公司的注册商标,用来特指网景(Mozilla)对着门的实现. ECMAScript: 网景将这么语言作为标准