Web缓存的概念

Web缓存是可以自动保存常见文档副本的HTTP设备。

使用缓存的优点:

  1. 减少了数据的数据传输,节省了网络费用;
  2. 缓解了网络瓶颈的问题,不需要更多的带宽就能更快地加载页面;
  3. 降低了原始服务器的要求,服务器可以更快地响应、避免过载出现;
  4. 降低了距离时延,因为比较远的地方加载页面会慢一些;

HTTP为我们提供了几个用来对已缓存对象再验证的工具,但最常用的是 IF-Modified-Since首部。将这个首部添加到 GET 请求中去,就可以通知服务器:只有在缓存了对象的副本之后,又对其进行了修改的情况下,才发送此对象。

服务器对象未被修改: 服务器向客户端发送一个小的 HTTP 304 Not Modified 响应;

服务器对象与已缓存对象不同: 服务器向客户端发送一条普通的、带有完整内容的 HTTP 200OK 响应;

服务器对象不存在: 服务器回送一个 404 Not Found 响应,缓存将其副本删除;

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

客户端 有一种方法可以判断相应是否来自缓存,就是使用 Date首部。将响应中Date首部的值与当前时间进行比较,如果响应中的日期值比较早,客户端通常就可以认为这是一条缓存的响应。

缓存的拓扑结构:

缓存可是单个用户专用的,也可以是若干名用户共享的。专用缓存被称为 私有缓存 (个人缓存,包含了单个用户最常用的页面),共享的缓存被成为 公有缓存(包含了某个用户团体的常用页面)。

缓存的处理步骤:

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

文档过期:

通过特殊的 HTTP Cache-Control 首部Expires 首部HTTP 让原始服务器向每个文档附加了一个 过期时间。在缓存文档过期之前,缓存可任意频率使用这些副本,而无需与服务器联系,当然,除非客户端请求中包含有阻止提供已缓存或未验证资源的首部。

如果文档过期了,并不意味着它和原始服务器上目前处于活跃状态有实际的区别,仅仅意味着到了要进行核对时间了,这种情况被为 服务器再验证,说明缓存需要询问原始服务器文档是否发生了变化。如果文档发生了变化,缓存会获取一份新的文档副本,并将其存储在旧文档的位置上,然后将文档发送给客户端。如果文档没有发生变化,缓存只需要获取新的首部,包括一个新的过期日期,并对缓存中的首部进行更新即可。

HTTP协议缓存要求

HTTP协议要求行为正确的缓存返回下列内容之一:

  1. 足够新鲜的 已缓存副本;
  2. 与服务器进行过再验证,确认其仍然新鲜的已缓存副本;
  3. 如果需要与之进行再验证的原始服务器出现了故障,就返回一条错误报文;
  4. 附有警告信息说明内容可能不正确的已缓存对象;
实体标签再验证: If – None – Match

实体标签 是附加到文档上的任意标签。它们可能包含了文档的序列号或版本号,或者是文档内容的校验及其他信息。当发布者对文档进行了修改时,可以修改文档的实体标签来说明这个新的版本。这样如果实体标签被修改了,缓存就可以用 If – None – Mach 条件首部来 GET 文档的新副本了。实体标签和修改日期都是 缓存验证器

控制缓存:

服务器可以通过 HTTP 定义的几种方式来指定在文档过期之前可以将其缓存多长时间,按照优先级顺序:

可以将以下首部信息附加到响应中:

1. Cache – Control :no-store
禁止缓存对响应进行复制。缓存通常会向非缓存代理服务器一样,向客户端转发一条no-store响应,然后删除对象 2.Cache – Control :no-cache
标识为no-cache的响应实际上是可以存储在本地缓存区中的,只是在原始服务器进行新鲜度再验证之前,缓存不能将其提供给客户端使用 3.Cache – Control :must-revalidate 4.Cache – Control :max-age
表示从服务器将文档传来之时起,文档的新鲜状态剩余秒数,服务器可以将 Cache–Control:max-age 设置为0,从而在每次访问的时候都进行刷新 5.Cache – Control :Expires
不附加过期信息,让缓存确定自己的过期日期。

通过 HTTP-EQUIV 控制HTML缓存:

将HTML文档设置为非缓存的:

<META HTTP-EQUIV = "cache-control"  Content = "no -cache" >

<META HTTP-EQUIV > 标签并不是控制文档缓存特性的好方法。因为支持 HTTP-EQUIV 标签 的HTML浏览器使用的 Cache-Control 规则可能会与拦截代理缓存所使用的规则有所不同,这样就会使缓存的过期处理行为发生混乱。所以由经过正确配置的服务器发送

HTTP首部 来交流对文档的缓存控制请求是唯一可靠的办法。

### 图灵图书 -- HTTP权威指南

豆瓣读书 -- HTTP权威指南

《HTTP权威指南》– 7.缓存的更多相关文章

  1. JavaScript权威指南 - 函数

    函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...

  2. Struts2权威指南笔记

    Struts2权威指南笔记 1.mvc特点包括: ① 多个视图可以对应一个模型 ② 模型返回的数据与显示逻辑分离 ③ 应用层被分隔为三层,降低了各层之间的耦合,提供了应用的可扩展性 ④ 控制层的概念也 ...

  3. Hadoop权威指南:MapReduce应用开发

    Hadoop权威指南:MapReduce应用开发 [TOC] 一般流程 编写map函数和reduce函数 编写驱动程序运行作业 用于配置的API Hadoop中的组件是通过Hadoop自己的配置API ...

  4. Hadoop权威指南:HDFS-数据流

    Hadoop权威指南:HDFS-数据流 [TOC] 剖析文件读取 客户端通过调用FileSystem对象的open()方法来打开希望读取的文件,对于HDFS来说, 这个对象是分布式文件系统的一个实例 ...

  5. 【HTTP权威指南】第1 章 HTTP 概述

    1.1 HTTP--因特网的多媒体信使 ................................................................................ ...

  6. 《HTTP权威指南》读书笔记(一)

    1.因特网上有数千种不同的数据类型,HTTP仔细地给每种要通过Web传输的对象都搭上了名为MIME类型的数据格式标签.WEB服务器会为所有HTTP对象数据附加一个MIME类型.当Web浏览器从服务器中 ...

  7. 《http权威指南》读书笔记18

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  8. 《http权威指南》读书笔记17

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  9. 《http权威指南》读书笔记14

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

  10. 《http权威指南》读书笔记10

    概述 最近对http很感兴趣,于是开始看<http权威指南>.别人都说这本书有点老了,而且内容太多.我个人觉得这本书写的太好了,非常长知识,让你知道关于http的很多概念,不仅告诉你怎么做 ...

随机推荐

  1. 在项目中自定义集成IdentityService4

    OAuth2.0协议 在开始之前呢,需要我们对一些认证授权协议有一定的了解. OAuth 2.0 的一个简单解释 http://www.ruanyifeng.com/blog/2019/04/oaut ...

  2. Qemu/Limbo/KVM镜像:Ubuntu Mate 22.04+Wine 7.8

    链接: https://pan.baidu.com/s/1cf2c_ylu7-SUaYl8ddztog 提取码: b9mi 密码 空格 手机推荐使用termux里面的Qemu运行,速度最快. 镜像特征 ...

  3. POJ1651 Multiplication Puzzle (区间DP)

    这道题的妙处在于把原问题看成矩阵连乘问题,求这些矩阵相乘的最小乘法次数,比如一个i*k矩阵乘一个k*j的矩阵,他们的乘法次数就是i*k*j (联想矩阵乘法的三层循环),题目说的取走一张牌,类似于矩阵相 ...

  4. 谣言检测(RDEA)《Rumor Detection on Social Media with Event Augmentations》

    论文信息 论文标题:Rumor Detection on Social Media with Event Augmentations论文作者:Zhenyu He, Ce Li, Fan Zhou, Y ...

  5. Git的使用以及常用命令(详解)

    一. 版本控制工具 什么是版本控制系统? 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版 本修订情况的系统.版本控制系统不仅可以应用 ...

  6. Linux系统管理_网络管理

    常用网络指令 yum -y install net-tools #安装ifconfig工具 ifconfig #查看网络配置 ifup ens33 #启用网卡 ifdown ens33 #禁用网卡 s ...

  7. 3.CBV视图之csrf补充

    CBV使用csrf装饰器关闭/开启 csrf验证,直接在函数上加装饰器无效的 #方法1 from django.views import View from django.views.decorato ...

  8. AIR32F103(四) 27倍频216MHz,CoreMark跑分测试

    目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...

  9. element-ui v-table 复选框默认选中

    <el-table ref="refTable" :data="list" v-loading="listLoading" eleme ...

  10. 第2-3-2章 环境搭建-文件存储服务系统-nginx/fastDFS/minio/阿里云oss/七牛云oss

    目录 5. 文件服务开发 5.1 环境搭建 5.1.1 数据库环境搭建 5.1.2 Nacos环境搭建 5.1.3 Nginx环境搭建 5.1.4 maven工程环境搭建 5. 文件服务开发 全套代码 ...