1. HTTP并不支持兄弟缓存,所以人们通过一些协议对HTTP进行了扩展,比如因特网缓存协议(Internet Cache Protocol, ICP)和超文本缓存协议(HyperText Caching Protocol, HTCP)。

2.  缓存的处理步骤

  • 接收;
  • 解析;
  • 查找,专业级的缓存会使用快速算法来确定本地缓存中是否有某个对象。
  • 新鲜度检测,http有一组非常复杂的新鲜度检测规则,缓存产品支持的大量配置选项。Http有一些简单的机制可以在不要求服务器记住有哪些缓存拥有其文档副本的情况下,保持已缓存数据与服务器数据之间充分一直。HTTP将这些简单的机制称为文档过期(document expiration)和服务器再验证(server revalidation)
  1. 文档过期:http首部 cache-Control:max-age = 23s(指定一个相对的日期,HTTP/1.1)和Expires(指定一个绝对的日期,HTTP/1.0+)。
  2. 服务器再验证:仅仅是已缓存文档过期了并不意味着他和原始服务器上目前处于活跃状态的文档有实际的区别;这只是意味着到了要进行核对的时间了。这种情况被称为“服务器再验证”,说明缓存需要询问原始服务器文档是否发生了变化。用条件方法进行再验证:HTTP允许缓存想原始服务器发送一个“条件 GET”,请求服务器只有在文档和缓存中现有的副本不相同时,才回送对象主体。通过这种方法,将新鲜度检测和对象获取结合成了单个条件GET。 HTTP定义了5个提哦啊及那请求首部。对缓存再验证来说最有用的两个首部是If-Modified-Since和If-None-Match(其他首部包括, if-Unmodified-Since, If-Range, If-Match)。说有条件首部都以If-开头。缓存验证器(cache validater)
    • If-Modified-Since+date.
    • If-None-Match,实体标签再验证。有些情况下仅适用最后修改日期进行再验证是不够的。HTTP允许用户对被称为实体标签(ETag)的“版本标识符”进行比较。实体标签是附加在文档上的任意标签(引用字符串)。If-None-Match+version information。
    • 强弱验证器(HTTP/1.1支持弱验证器)。弱验证器允许对一些内容做出了修改。但内容的主要含义发生变化时,通常他还是会发生变化。用”W/“来标示弱验证器。
  • 创建响应;
  • 发送;
  • 日志。

3. 控制缓存的能力

服务器可以通过HTTP定义的几种方式来指定在文档过期之前可以将其缓存多长时间。按照优先级递减的顺序,服务器可以首部到响应中去。

  • no-Store与no-Cache响应首部(eg. Cache-Control:no-Store; Cache-Control:no-Cache),标示no-Store的响应会禁止响应对缓存进行复制。缓存通常会像缓存代理服务器一样,向客户端转发一条no-store响应,然后删除对象。标识为no-Cache的响应实际上是可以存储在本地缓存区中的。只是在与原始服务器进行再验证之前,缓存不能够提供给客户端使用。HTTP/1.1中提供Pragma:no-Cache首部是为了兼容HTTP/1.0+。HTTP/1.1应该用Cache-Control:no-Cache。
  • max-age响应首部(Cache-Control:max-age)
  • expires响应首部(Cache-Control:Expires),指定的是实际的过期日期。
  • must-revalidate
  • 试探性过期

【WEB HTTP】缓存的更多相关文章

  1. [Asp.net web api]缓存

    摘要 为了提高接口的性能,我们常做的优化就包括缓存,对经常访问但变化不大的数据进行缓存.或者使用http的缓存,减少请求的次数. web api缓存 在提供的api,我们也可以实现缓存,来减少访问的次 ...

  2. WEB端缓存机制

    WEB端缓存机制 什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本.缓存会根据进来的请求保存输出内容的副本:当下一个请 ...

  3. nginx做rails项目web服务器缓存配置方法

    nginx作为Web服务器.或反向代理服务器都可以使用缓存 一.作为Web服务器 nginx可以通过 expires 指令来设置响应头的过期时间,实现浏览器缓存(Browser Caching),即浏 ...

  4. Web服务器缓存

    前面提到的一些缓存技术都是有我们的动态才程序控制的,现在的web服务器功能越来越强大,常用的web服务器软件也都内置了缓存功能,下面我们就简单的说下服务器端缓存的应用. 首先,我们先来介绍一下URL映 ...

  5. PHP WEB 引擎缓存加速优化

    PHP 缓存加速器介绍 操作码缓存 请求一个 PHP 程序时,PHP 引擎会解析程序,并且将编译码作为特定操作码.这是要执行的代 码的一种二进制表示形式.随后,此操作码有 PHP 引擎执行并丢弃.操作 ...

  6. java web开发缓存方案,ehcache和redis哪个更好

    Ehcache在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apac ...

  7. WEB 应用缓存解析以及使用 Redis 实现分布式缓存

    什么是缓存? 缓存就是数据交换的缓冲区,用于临时存储数据(使用频繁的数据).当用户请求数据时,首先在缓存中寻找,如果找到了则直接返回.如果找不到,则去数据库中查找.缓存的本质就是用空间换时间,牺牲数据 ...

  8. Eclipse中web项目缓存路径

    eclipse运行web项目后, 默认保存到 workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps ecli ...

  9. web页面缓存技术之Local Storage

    业务:检测页面文本框的值是否有改变,有的话存入缓存,并存储到数据库,这样用户异常操作后再用浏览器打开网页,就可避免重新填写数据 数据库表:Test,包含字段:PageName,PageValue BL ...

  10. SpringMVC Memcached 搭建WEB项目缓存框架

    最近做的项目一直在使用memcached作为缓存来缓存各种数据,现在BOSS要在项目上加上缓存.并把任务交给我.便琢磨怎么解决这个问题. 看了很多文章,写的比较详尽靠谱的就是这篇了http://www ...

随机推荐

  1. Android WebView学习

    Android WebView学习 文章来源:小小懒羊羊个人知识管理库 权限: <uses-permission android:name="android.permission.IN ...

  2. 关于top按钮的网页设置

    方法一: 直接用html实现,没有缓冲的效果,直接彪到顶部. HTMl: <a id="return-top" href="#top"> <s ...

  3. Ionic学习笔记1_基本布局

    <body> <!-- 头部 -->                               bar里嵌入子元素:title,button,button-bar和 inpu ...

  4. 李洪强经典面试题48-C语言

    可能碰到的iOS笔试面试题(4)--C语言   C语言,开发的基础功底,iOS很多高级应用都要和C语言打交道,所以,C语言在iOS开发中的重要性,你懂的.里面的一些问题可能并不是C语言问题,但是属于计 ...

  5. error: unkown OS type hvm 解决方法 kvm libvirtd 重新加载已有虚拟机信息

    想验证下最新版本的qemu的一些功能,于是将其从qemu-0.12升级到了qemu-1.4,编译安装一切都很顺利,但是当创建virtual machine时,报错如下: [root@compute-- ...

  6. \sum的写法

    \sum默认上下标是写在右上角和右下角的.在独立公式中,则是写在上面和下面的.对于行内公式,我们也可以强制用\limits让其上下表标出现在上面和下面.Note:\sum\nolimits的作用相当于 ...

  7. Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播

    工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理.这篇文章会讲述Consul是如何使用Gossip来做集群成员管理和消息广播的. Consul使用Go ...

  8. Linux 后台任务

    1 我想把updatedb命令(用于重新建立整盘索引的命令)放在后台运行. # updatedb & [1] 23336 注释:在所要执行的命令后面加上空格,再加上&符号即可实现后台执 ...

  9. Spring学习笔记及资源

    极客学院团队出品 Spring 教程  http://wiki.jikexueyuan.com/project/spring/ Spring 提供了以下两种不同类型的容器. 序号 容器 & 描 ...

  10. VLine[-1]=VLine[width]=128 数组的负一地址代表啥

    最近在调算法是,涉及到rgb转yuv数据的一个函数,出现了这种常见错误:如下 unsigned char *VLine = (new unsigned char[width+2]);//+1;     ...