《HTTP权威指南》读书笔记:缓存
缓存的定义
Web缓存是可以自动保存常见文档副本的HTTP设备(包括浏览器?)
缓存的作用
- 减少冗余数据传输
- 缓解带宽瓶颈(很多网络为本地网络客户端提供的带宽比为远程服务器提供的带宽要宽)
- 缓解瞬时拥塞(不会所有的请求都奔着一台服务器去)
- 降低距离时延(就近访问么)
命中、非命中
- 命中率:请求命中缓存的比例
- 字节命中率:请求命中缓存的文档,其文档大小总和,占所有请求大小总和的比例(一些大文档尽管访问少,但对流量贡献大,对于按流量计费的人来说很重要)
客户端如何判断请求是否命中缓存:它能够过Date首部,如果Date的值比当前日期值要早,那么可以认为是缓存的响应。
如何保持副本的新鲜
HTTP通过以下两种机制来实现这样的目的:不要求服务器记住哪些缓存拥有资源副本,同时保持已缓存数据与服务器数据之间的一致。
1. 文档过期(document expiration)—— Cache-Control、Expires
2. 服务器再验证(server revalidation)—— If-Modified-Since(时间)、If-None-Match(结合ETag)
文档过期:相关的header
Expires
HTTP 1.0引入,指定实际的过期时间,而不是秒数。不推荐使用,原因:很多服务器的始终不同步或不正确。使用举例:
Expires: Fri, 05 Jul 2002, 05:00:00 GMT
Cache-Control: max-age
从服务器将资源传送过来时算起,文档处于新鲜的时间(单位为秒)。可通过将其设为0,来请求缓存(服务器)不要缓存资源。举例:
Cache-Control: max-age=0
Cache-Control: no-cache
名字比较有歧义,实际表达的意思是:缓存(服务器)在与原始服务器进行新鲜度再验证前,不能将资源提供给客户端使用。这里包含两个点:
- 标识为
no-cache的响应实际是可以存储在本地缓冲区的 - 必须每次与原始服务器再校验
举例:
Cache-Control: no-cache
Cache-Control: no-store
带有no-store的响应,会禁止缓存对资源进行复制。缓存向客户端转发no-store响应后,会将副本删除。
Cache-Control: must-revalidate
可以使用陈旧(过期)的资源以提高性能。但在没有与原始服务器进行再验证的情况下,不能使用资源的陈旧副本。
与no-cache的区别:
no-cache:无论资源副本是否过期,都必须与原始服务器进行校验must-revalidate:资源副本过期前,无需校验;过期后,须校验,如原始服务器上的资源没变化,那么缓存可以提供陈旧的副本。(减少资源传输)
服务器再验证
If-Modified-Since(IMS)
询问服务器,资源在If-Modified-Since指定的时间之后,是否被修改了,如果
- 没被修改:返回
304 Not Modified响应报文,同时只会发送需要在源端更新的首部,比如新的过期时间。 - 被修改了:携带新首部的资源会被返回给缓存,包括新的过期时间。
例子:
If-Modified-Since: Sat, 29 Jun 2002, 14:30:00 GMT
If-None-Match
ETag:实体标签(Entity Tag)。ETag再验证的原因:
- 有些文档会被周期性地重写,但实际包含的数据常常是一样的,但修改时间已经发生变化。
- 文档被修改了,但修改并不重要,不需要让所有缓存都失效。
- 某些服务器无法准确判断资源的最后修改时间。
流程与If-Modified-Since差不多,带上ETag去服务器查询,如果
- ETag发生变化:返回带有新ETag的资源
- ETag没变化:返回304 Not Modified
例子:
If-None-Match: "v2.6
If-None-Match: "v2.6","v2.7"(告诉服务器,带有这些实体标签的副本缓存上已有了)
《HTTP权威指南》读书笔记:缓存的更多相关文章
- HTTP权威指南读书笔记
HTTP权威指南笔记 读书有两种境界,第一种境界是将书读薄,另一种是读厚.本篇文章就是HTTP权威指南的读书笔记,算是读书的第一重境界,将厚书读薄.文章对HTTP的一些关键概念做了比较详细的概述,通读 ...
- 经典的性能优化最佳实践 web性能权威指南 读书笔记
web性能权威指南 page 203 经典的性能优化最佳实践 无论什么网络,也不管所用网络协议是什么版本,所有应用都应该致力于消除或减 少不必要的网络延迟,将需要传输的数据压缩至最少.这两条标准是经典 ...
- css权威指南读书笔记
今天翻手机,翻到了许久之前看css权威指南时的笔记,遂移到博客中来. 1.属性选择器p.one class名为one的p元素p[class][name] 含有class和name属性的p元素p[cla ...
- css权威指南读书笔记-第10章浮动和定位
这一章看了之后真是豁然开朗,之前虽然写了圣杯布局和双飞翼布局,有些地方也是模糊的,现在打算总结之后再写一遍. 以下都是从<css权威指南>中摘抄的我认为很有用的说明. 浮动元素 一个元素浮 ...
- Hadoop权威指南读书笔记
本书中提到的Hadoop项目简述 Common:一组分布式文件系统和通用I/O的组件与接口(序列化.javaRPC和持久化数据结构). Avro:一种支持高效.跨语言的RPC以及永久存储数据的序列化系 ...
- Java性能优化权威指南-读书笔记(二)-JVM性能调优-概述
概述:JVM性能调优没有一个非常固定的设置,比如堆大小设置多少,老年代设置多少.而是要根据实际的应用程序的系统需求,实际的活跃内存等确定.正文: JVM调优工作流程 整个调优过程是不断重复的一个迭代, ...
- Kafka权威指南 读书笔记之(五)深入Kafka
集中讨论以下3 个有意思的话题 :• Kafka 如何进行复制:• Kafka 如何处理来自生产者和消费者的请求 :• Kafka 的存储细节,比如文件格式和索引. 集群成员关系 Kafka 使用 Z ...
- Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据
KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...
- HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解
一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...
- Java性能权威指南读书笔记--之一
JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ...
随机推荐
- Oracle EBS 用户职责人员取值
SELECT fu.user_name 用户名, fu.description 用户说明, fu.start_date 用户启用日期, fu.end_date 用户终止日期 --,fu.employe ...
- 运维安全之Tripwire
转自网络 Tripwire是最为著名的unix下文件系统完整性检查的软件工具,这一软件采用的技术核心就是对每个要监控的文件产生一个数字签名,保留下来. 当文件现在的数字签名与保留的数字签名不一致时,那 ...
- PHP 定界符
双引号和单引号是常用的字符串定界符,在php4.0以后 还可以使用字符串定界符<<<,功能和双引号差不多,用法如下 <<<标识符 字符串 标识符 其中最后的标识符必 ...
- 内网arp攻击
内网arp攻击 环境:一台kali虚拟机(攻击者),一台win7虚拟机(用户) 网络:NAT模式 网段:192.168.41.0/24 网关:192.168.41.2/24 win7的IP地址:192 ...
- Windows Phone 8 获取与监听网络连接状态(转)
原文地址:http://www.cnblogs.com/sonic1abc/archive/2013/04/02/2995196.html 现在的只能手机对网络的依赖程度都很高,尤其是新闻.微博.音乐 ...
- SDN2017 第二次作业
阅读文章<软件定义网络(SDN)研究进展>,并根据所阅读的文章,书写一篇博客,回答以下问题(至少3个): 1.为什么需要SDN?SDN特点? 2.SDN的基本思想? 3.ONF全称是什么, ...
- 金三银四求职季,前端面试题小梳理(HTML、CSS、JS)
好久没写学习记录,最近太多事,又到一年求职季,都说金三银四求职季,自己也做一下最近学习的一些前端面试题梳理,还是个小白,写的不对请指正,不胜感激. HTML篇 html语义化 用语义化的代码标签书写, ...
- android与JS交互,互相调用方法,跳转到网页
在main下面New - Folder - Assets Folder,在Assets下面新建一个js_android.html <html><head> <meta h ...
- Guava 的EventBus示例代码(简单笔记,后期补充)
package guavademo.event.bus; import com.google.common.eventbus.EventBus; import com.google.common.ev ...
- Flume学习之路 (一)Flume的基础介绍
一.背景 Hadoop业务的整体开发流程: 从Hadoop的业务开发流程图中可以看出,在大数据的业务处理过程中,对于数据的采集是十分重要的一步,也是不可避免的一步. 许多公司的平台每天会产生大量的日志 ...