《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的编译器先将其 ...
随机推荐
- seq 序列
seq 序列用法: seq [option]...last seq [option]...first last seq [option]...first increment last 例如:seq 5 ...
- python基础学习7----编码与解码
一.python2 python2中默认以ASCII编码 str='hello world' gbk_to_unicode=str.decode('gbk')#将gbk解码为unicode print ...
- 根据字体多少使UILabel自动调节尺寸
原文:http://blog.csdn.net/enuola/article/details/8559588 在大多属性情况下,给UILabel进行动态数据绑定的时候,往往需要根据字符串的多少,动态调 ...
- 卷积神经网络入门:LeNet5(手写体数字识别)详解
第一张图包括8层LeNet5卷积神经网络的结构图,以及其中最复杂的一层S2到C3的结构处理示意图. 第二张图及第三张图是用tensorflow重写LeNet5网络及其注释. 这是原始的LeNet5网络 ...
- Django商城项目笔记No.1项目准备工作
Django商城项目笔记No.1项目准备工作 一.本项目商城属于B2C商业模式 二.项目采用前后端分离的应用模式 前端使用Vue.js 后端使用Django REST framework 1.创建gi ...
- [python] 修改Tkinter 的默认图标
先上一个不修改的样式,如下: import easygui as g g.msgbox("hello","hi") 注意左上角的图标为红色的Tk字样 修改后: ...
- 原生JS简单的无缝自动轮播
最近在不断的加强巩固js.在学习jq和vue之后发现很多东西其实都是不明所以,有些底层的东西自己不懂,到头来也只是一昧的使用,一直在用别人的东西,对自己的成长帮助也不大. 万丈高楼平地起,基础打扎实了 ...
- BZOJ3211:花神游历各国(线段树)
Description Input Output 每次x=1时,每行一个整数,表示这次旅行的开心度 Sample Input 4 1 100 5 5 5 1 1 2 2 1 2 1 1 2 2 2 3 ...
- 【转】网段,子网掩码,网络标识,IP划分
网段指一个计算机网络中使用同一物理层设备(传输介质,中继器,集线器等)直接通讯的那一部分.就是从一个IP到另一个IP 好比 从192.168.0.1到192.168.255.255这之间就是一个网段 ...
- kubernetes 垃圾回收机制
一:前言 Kubernetes系统在长时间运行后,Kubernetes Node会下载非常多的镜像,其中可能存在很多过期的镜像.同时因为运行大量的容器,容器推出后就变成死亡容器,将数据残留在宿主机上, ...