通过使用缓存web网站和web应用的性能能够得到显著的提升。Web caches能够减小延迟和网络流量,从而缩短展示资源所花费的时间。

在http中控制缓存行为的首部字段是Cache-Control,Cache-Control可以有多个指令,指令之间用逗号分割。Cache-Control是通用首部字段,它即能出现在响应头中也能出现在请求头中

一.缓存请求指令

  1. Cache-Control: max-age=<seconds>
  2. Cache-Control: max-stale[=<seconds>]
  3. Cache-Control: min-fresh=<seconds>
  4. Cache-Control: no-cache
  5. Cache-Control: no-store
  6. Cache-Control: no-transform
  7. Cache-Control: only-if-cached

二.缓存响应指令

  1. Cache-Control: must-revalidate
  2. Cache-Control: no-cache
  3. Cache-Control: no-store
  4. Cache-Control: no-transform
  5. Cache-Control: public
  6. Cache-Control: private
  7. Cache-Control: proxy-revalidate
  8. Cache-Control: max-age=<seconds>
  9. Cache-Control: s-maxage=<seconds>

三.指令介绍

1.与缓存能力相关的指令

1.public:指明任何缓存区都能够缓存响应

2.private:指明响应是针对单一用户的,不能存储在共享缓存区中,只有私有缓存区能存储响应

3.no-cache:在使用缓存资源之前要向源服务器验证缓存的有效性

4.only-if-cached:指明客户端只想从缓存中获取响应,不需要与源服务器联系确定资源是否更新

2.与到期时间相关的指令

1.max-age=<seconds>:指定资源被视为有效的最大时间量,单位为秒

2.s-maxage=<seconds>:与max-age=<seconds>指令的作用相似,但是它只对共享缓存有效,对私有缓存无效

3.max-stale[=<seconds>]:即使缓存资源过期客户端还是接受缓存区中的资源。如果未指定数值,那么无论过期多久,客户端都接受缓存区中的响应,如果指定了具体数值,那么即使过期,只要处于max-stale指定的时间内,客户端还是接受缓存区中的资源

4.min-fresh=<seconds>:表明从缓存区中返回未过指定时间的缓存资源

5.stale-while-revalidate=<seconds>:指示客户端愿意接受一个过期的响应,同时在后台异步检查一个新的响应。秒值表示客户机愿意接受过期响应的时间。

6.stale-if-error=<seconds>:如果检查新资源失败,客户端愿意接受过期的资源。秒值指示客户端在初始过期后愿意接受过期响应的时间。

3.与重新验证和重新加载相关的指令

1.must-revalidate:在使用过期的缓存资源之前,必须向源服务器确认缓存资源的状态并且不会使用过期的资源。它会忽略max-stale[=<seconds>]指令

2.proxy-revalidate:和must-revalidate作用类似,但是它只应用于共享缓存,会被私有缓存忽略

3.immutable:指明在任何时候都不能改变响应体

4.其他指令

1.no-store:不缓存请求和响应中的任何内容

2.no-transform:缓存不能改变请求和响应中的任何实体主体(The Content-Encoding, Content-Range, Content-Type 头部字段不能被修改)

http缓存(http caching)的更多相关文章

  1. 函数缓存 (Function caching)

    函数返回值缓存是优化一个函数的常用手段.我们可以将函数.输入参数.返回值全部保存起来,当下次以同样的参数调用这个函数时,直接使用存储的结果作为返回(不需要重新计算). 函数缓存允许我们将一个函数对于给 ...

  2. spring中的缓存--Caching

    1.spring从3.1开始支持缓存功能.spring 自带的缓存机制它只在方法上起作用,对于你使用其他持久化层的框架来讲,是没有影响的,相对来讲这种缓存方式还是不错的选择. 2.提供缓存的接口:or ...

  3. C# - 缓存OutputCache(二)缓存详细介绍

    本文是通过网上&个人总结的 1.缓存介绍 缓存是为了提高访问速度,而做的技术. 缓存主要有以下几类:1)客户端缓存Client Caching 2)代理缓存Proxy Caching 3)方向 ...

  4. 前端学HTTP之缓存

    前面的话 Web缓存是可以自动保存常见文档副本的HTTP设备.当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是原始服务器中提取这个文档.本文将详细介绍缓存的相关内容 功能 ...

  5. .Net环境下的缓存技术介绍 (转)

    .Net环境下的缓存技术介绍 (转) 摘要:介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 ...

  6. .Net环境下的缓存技术介绍

    .Net环境下的缓存技术介绍 摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页) 1         概念 1.1 ...

  7. Java8简单的本地缓存实现

    原文出处:lukaseder         Java8简单的本地缓存实现 这里我将会给大家演示用ConcurrentHashMap类和lambda表达式实现一个本地缓存.因为Map有一个新的方法,在 ...

  8. ASP.NET MVC 数据库依赖缓存的实现

    当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过轮询获取数据变化的信息,使用轮询的话也不可能重新查一次后再和以前的数据做比较,如果这样的话如果我一个 ...

  9. asp.net mvc 缓存

    webConfig 里面配置缓存时间 <caching> <outputCacheSettings> <outputCacheProfiles> <add n ...

随机推荐

  1. js—双等号引起的类型转换过程

    一.首先看双等号前后有没有NaN,如果存在NaN一律返回false 二.再看双等号前后有没有布尔,有布尔就将布尔转换为数字.(false是0,true是1) 三.接着看双等号前后有没有字符串,有三种情 ...

  2. js函数知识

    1.函数基本知识 通过函数可以封装任意条语句,在任何地方调用,js中用function关键字来声明, //基本格式,函数名,传递参数,代码块 function functionName(arg0,ar ...

  3. Eclipse启动报错[ out of memory error has occurred ]或[ An internal error occurred while showing an internal error ]

    自我总结,有什么需要纠正或更好的方案,请告知,谢谢! 最近上来看到好多同学都遇到了这个问题,之前我也好几次碰到这个问题,很是恼火,什么没干,eclipse一开电脑就卡死了,后来发现不管是新打开ecli ...

  4. CF 455D. Serega and Fun [分块 deque]

    Serega and Fun 题意: [l,r]循环右移一位,查询区间内某个数出现次数 为什么好多人用链表?反正我是不会写双向链表 完全可以分块然后模拟啊...中间的块只会插入删除一个元素呀....用 ...

  5. canvas绘制时钟及注释及save和restore的用法

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. springIOC、AOP的一些注解

    springIOC.AOP的一些注解(使用这些注解之前要导入spring框架的一些依赖):    1.注入IOC容器        @Compontent:使用注解的方式添加到ioc容器需要在配置文件 ...

  7. mongoDB高级查询$type4array使用解析

    今天在使用mongoDB高级查询$type:符号 -- 4代指Array类型发现一个问题. $type符号: $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. 下面是mong ...

  8. 微信小程序模板发送,openid获取,以及api.weixin.qq.com不在合法域名内解决方法

    主要内容在标题三,老手可直接跳到标题三. 本文主要解决个人开发者模板消息发送的问题(没有服务器,不能操作服务器的情况) 针对api.weinxin.qq.com不在以下合法域名列表内的问题提出的解决方 ...

  9. python学习:函数传参数

    #!/usr/bin/python   import sys   def isNum(s):     for i in s:         if i in '0123456789':         ...

  10. css scale 元素放大缩小效果

    <style> .trans-scale { width: 300px; height:300px; margin:100px auto; background:#99F; transit ...