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. 83. Remove Duplicates from Sorted List【easy】

    83. Remove Duplicates from Sorted List[easy] Given a sorted linked list, delete all duplicates such ...

  2. jstat -gcutil pid millsec

      1. jstat -gc pid 可以显示gc的信息,查看gc的次数,及时间. 其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc ...

  3. qt 4.8.5 vs 2012编译

    Download Qt 4.8.3 source code from http://qt-project.org/downloads Go to mkspecs\win32-msvc2010. Ope ...

  4. Vsphere笔记06 Vcenter 部署流程 1

    Vcenter 部署流程 1   一.环境需求   1.需要两台装着WIN2K8 R2 64X的服务器   2.启用一台要添加活动目录角色,并且配置DC,DC的参数如下: 域名:justech-dc. ...

  5. Mysql闪回技术之 binlog2sql

    1.下载 https://github.com/danfengcao/binlog2sql http://rpmfind.net Search: python-pip pip 是一个Python包管理 ...

  6. bat遍历当前目录下的文件,批量重命名

    @echo off setlocal enabledelayedexpansion for %%x in (*) do ( if not "%%x"=="demo.bat ...

  7. GoogleMap-------manifest文件配置

    前言:在使用GoopleMap之前需要配置manifest文件 1.这个可有可无,com.xhm.meishi是项目的包名 <!-- 声明调用这个应用需要的权限 --> <permi ...

  8. ios [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错

    今天接口由get换成post,我去改进行登录但出现了这个错误,首先出错先看能不能与服务器交互,能不能获得数据,其次,获得的数据是不是你想要的,记住,首先出错要想到是自己的问题,还有就是程序崩了要学会自 ...

  9. 第二章----python基础

    概要:python是一种计算机编程语言,有自己的一套语法,编译器或者解释器负责把符合语法的程序代码翻译成CPU能识别的机器码,然后执行.python使用缩进来组织代码块,Python程序中大小写是敏感 ...

  10. Lucene索引文件组成

    Lucene的索引里面存了些什么,如何存放的,也即Lucene的索引文件格式,是读懂Lucene源代码的一把钥匙. 当我们真正进入到Lucene源代码之中的时候,我们会发现: Lucene的索引过程, ...