【WEB HTTP】缓存
1. HTTP并不支持兄弟缓存,所以人们通过一些协议对HTTP进行了扩展,比如因特网缓存协议(Internet Cache Protocol, ICP)和超文本缓存协议(HyperText Caching Protocol, HTCP)。
2. 缓存的处理步骤
- 接收;
- 解析;
- 查找,专业级的缓存会使用快速算法来确定本地缓存中是否有某个对象。
- 新鲜度检测,http有一组非常复杂的新鲜度检测规则,缓存产品支持的大量配置选项。Http有一些简单的机制可以在不要求服务器记住有哪些缓存拥有其文档副本的情况下,保持已缓存数据与服务器数据之间充分一直。HTTP将这些简单的机制称为文档过期(document expiration)和服务器再验证(server revalidation)
- 文档过期:http首部 cache-Control:max-age = 23s(指定一个相对的日期,HTTP/1.1)和Expires(指定一个绝对的日期,HTTP/1.0+)。
- 服务器再验证:仅仅是已缓存文档过期了并不意味着他和原始服务器上目前处于活跃状态的文档有实际的区别;这只是意味着到了要进行核对的时间了。这种情况被称为“服务器再验证”,说明缓存需要询问原始服务器文档是否发生了变化。用条件方法进行再验证: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】缓存的更多相关文章
- [Asp.net web api]缓存
摘要 为了提高接口的性能,我们常做的优化就包括缓存,对经常访问但变化不大的数据进行缓存.或者使用http的缓存,减少请求的次数. web api缓存 在提供的api,我们也可以实现缓存,来减少访问的次 ...
- WEB端缓存机制
WEB端缓存机制 什么是WEB缓存 Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本.缓存会根据进来的请求保存输出内容的副本:当下一个请 ...
- nginx做rails项目web服务器缓存配置方法
nginx作为Web服务器.或反向代理服务器都可以使用缓存 一.作为Web服务器 nginx可以通过 expires 指令来设置响应头的过期时间,实现浏览器缓存(Browser Caching),即浏 ...
- Web服务器缓存
前面提到的一些缓存技术都是有我们的动态才程序控制的,现在的web服务器功能越来越强大,常用的web服务器软件也都内置了缓存功能,下面我们就简单的说下服务器端缓存的应用. 首先,我们先来介绍一下URL映 ...
- PHP WEB 引擎缓存加速优化
PHP 缓存加速器介绍 操作码缓存 请求一个 PHP 程序时,PHP 引擎会解析程序,并且将编译码作为特定操作码.这是要执行的代 码的一种二进制表示形式.随后,此操作码有 PHP 引擎执行并丢弃.操作 ...
- java web开发缓存方案,ehcache和redis哪个更好
Ehcache在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apac ...
- WEB 应用缓存解析以及使用 Redis 实现分布式缓存
什么是缓存? 缓存就是数据交换的缓冲区,用于临时存储数据(使用频繁的数据).当用户请求数据时,首先在缓存中寻找,如果找到了则直接返回.如果找不到,则去数据库中查找.缓存的本质就是用空间换时间,牺牲数据 ...
- Eclipse中web项目缓存路径
eclipse运行web项目后, 默认保存到 workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps ecli ...
- web页面缓存技术之Local Storage
业务:检测页面文本框的值是否有改变,有的话存入缓存,并存储到数据库,这样用户异常操作后再用浏览器打开网页,就可避免重新填写数据 数据库表:Test,包含字段:PageName,PageValue BL ...
- SpringMVC Memcached 搭建WEB项目缓存框架
最近做的项目一直在使用memcached作为缓存来缓存各种数据,现在BOSS要在项目上加上缓存.并把任务交给我.便琢磨怎么解决这个问题. 看了很多文章,写的比较详尽靠谱的就是这篇了http://www ...
随机推荐
- 红茶一杯话Binder (传输机制篇_中)
红茶一杯话Binder (传输机制篇_中) 侯 亮 1 谈谈底层IPC机制吧 在上一篇文章的最后,我们说到BpBinder将数据发到了Binder驱动.然而在驱动层,这部分数据又是如何传递到BBind ...
- sigpending
信号的阻塞:通过sigprocmask()将信号集sigset_t中的信号设置为阻塞.SIG_BLOCK是指对相应信号的“递送阻塞”,内核在递送一个原来被阻塞的信号给进程时(而不是在产生该信号时),才 ...
- 设备模型的基础---kobject,kset
设备模型的基础是kobject,kset,kobj_type.kobject本身并没有什么意义,真正有用的地方在于嵌入了kobject的结构体(对象),kobject可以看成是一个最小单元,sysfs ...
- c++ 用namespace实现java的package的功能
以前喜欢这样组织文件: myproject/src/moduleA放moduleA的所有cpp文件 myproject/include/moduleA放moduleA的所有h文件 对moduleB.C ...
- Math函数的"四舍五入",Floor,Ceiling,Round的一些注意事项!
1.Math.Round:四舍六入五取偶 引用内容 Math.Round(0.0) //0Math.Round(0.1) //0Math.Round(0.2) //0Math.Round(0.3) / ...
- 配置linux服务器和pycharm的连接
1.打开pyCharm Tools->Deployment->Configuratio Connecion ->Root Path: /home/admin/application/ ...
- hdu5802 Windows 10 贪心
Windows 10 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- hdu1695 GCD2 容斥原理 求x属于[1,b]与y属于[1,d],gcd(x,y)=k的对数。(5,7)与(7,5)看作同一对。
GCD Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Sub ...
- 第一百八十六节,jQuery,验证表单插件,Ajax 表单插件,验证和提交表单
jQuery,验证表单插件,Ajax 表单插件,验证和提交表单 HTML <form id="reg" method="post" action=&quo ...
- Spring4 MVC+ AngularJS CRUD使用$http实例
这篇文章显示了使用Spring MVC4整合AngularJS.我们将创建一个使用后端和AngularJS作为前端的纯JSP封装Spring REST API一个CRUD应用程序, 使用 $http ...