一、web缓存可以分为数据库缓存、代理服务器缓存、浏览器缓存。

  其中浏览器缓存又包含很多内容:http缓存、indexDb、cookie、localStorage等。本片只讨论http缓存相关内容。

二、http缓存是通过头信息控制缓存。

  a. 分为强缓存和协商缓存两种。

  b. 强缓存如果命中,则不需要和服务器发生交互。

  c. 协商缓存不管是否命中,都要和服务器发生交互。

  d. 强缓存的优先级高于协商缓存。

三、强缓存。

  a. 可以理解为无需验证的缓存策略。

  b. 响应头中有两个字段来表明规则Expires/Cache-Control。

  c. Expires指定资源过期时间,超过这个时间点表明资源过期。是http1.0的标准。

  d. Cache-Control是http1.1的标准,优先级高于Expires。可能的取值有:max-age, s-maxage, public, private, no-cache, no-store, mast-revalidate。

  e. max-age指定资源过期时间,单位是s。在指定时间内直接使用缓存,不发送请求。

  d. s-maxage作用同max-age,但仅限于共享缓存,在私有缓存中被忽略。

  e. public表示响应既可以被代理服务器缓存又能被客户端缓存。

  f. private表示响应只能被客户端缓存。

  g. no-cache强制所有缓存了该响应的用户,在使用已缓存的数据前,发送带验证器的请求到服务器。

  h. no-store禁止缓存,每次请求都要向服务器重新获取。

  i. mast-revalidate表示如果缓存资源已过期则请求服务器重新拉取。

  

四、协商缓存。

  a. 缓存的资源到期了,不代表资源的内容发生了改变,如果和服务器上的资源没有差异,实际上没有必要再次请求。

  b. 浏览器第一次请求数据后会将数据和响应头部的缓存标识存储起来,再次请求时会带上存储的头部字段,服务器端验证是否可用。返回304代表资源没有发生改变可以使用缓存的数据,获得新的过期时间。返回200就相当于重新请求了一遍资源并替换旧资源。

  c. Last-modified  /  If-Modified-Since: Last-modified服务器端资源的最后修改时间,响应头部会带上这个标识。第一次请求后浏览器记录这个时间,再次请求时,请求头部带上

If-Modified-Since即之前记录下的时间。服务器端收到带If-Modified-Since的请求后回去和资源的最后修改时间对比。相等返回304,否则返回最新资,源状态码200。

  d. Etag  /  If-None-Match:原理同Last-modified  /  If-Modified-Since,只不过Etag是服务器端生成的一段hash字符串,精确度比laste-modified要高,属于强验证,要求资源字节级别的一致。

  

  

web缓存之--http缓存机制的更多相关文章

  1. System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...

  2. 005-优化web请求一-gzip压缩、http缓存控制和缓存校验[Pragma、Expires、Cache-Control、max-age、Last-Modified、用户刷新访问、避免过度304]

    优化Web应用的典型技术:缓存控制头信息.Gzip.应用缓存.ETag.反应型技术[异步方法调用和WebSocket] 一.模板缓存 spring.thymeleaf.cache=true sprin ...

  3. System.Web.Caching.Cache类 缓存 各种缓存依赖(转)

    转自:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntime ...

  4. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  5. 说说web缓存-强缓存、协商缓存

    网上关于WEB缓存的文章很多,今天汇总一下. 为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影 ...

  6. 【Web技术】276- WebView缓存原理分析和应用

    前言 混合式开发,在产品体验以及页面加载速度的体验上已经非比以往的.今日早读文章由@unclechen分享. 正文从这开始- 一.背景 现在的App开发,或多或少都会用到Hybrid模式,到了WebV ...

  7. C# System.Web.Caching.Cache类 缓存 各种缓存依赖

    原文:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntim ...

  8. Web前后端缓存技术(缓存的主要作用是什么)

    Web前后端缓存技术Web前后端缓存技术(缓存的主要作用是什么) 一.总结 一句话总结: 加快页面打开速度 减少网络带宽消耗 降低服务器压力 1.在Web应用中,应用缓存的地方有哪些? 主要有浏览器缓 ...

  9. 如何构建高性能web网站:分布式缓存

    一.数据库前端缓冲区 要清除数据库前缓冲区,首先必须明确什么是文件系统的内核缓冲区(Buffer Area):它位于内核的物理内存地址空间,除了使用O_DIRECT比其他标签中打开文件,所有的磁盘的读 ...

随机推荐

  1. SpringBoot 概念和起步

    一.概念和由来 1.什么是 Spring Boot Spring Boot 的设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用特定方式来进行配置,从而使开发人员不再需要定义样板化 ...

  2. 重启Apache报错

    重启Apache报错,如图所示:server: /etc/httpd/modules/mod_jk.so: wrong ELF class: ELFCLASS64 原因:mod_jd的版本有问题 解决 ...

  3. MongoDB的安装和使用指南

    什么是MongoDB   MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系 ...

  4. round()函数 浮点数的四舍五入

    浮点数的四舍五入 print round(1.7333) 2.0

  5. Azure AI 服务之文本翻译

    当下人工智能可谓是风头正劲,几乎所有的大厂都有相关的技术栈.微软在 AI 领域自然也是投入了重注,并且以 Azure 认知服务的方式投入了市场: 也就是说作为开发者我们不需要学习太多 AI 的理论知识 ...

  6. 大数据处理架构hadoop

    Hadoop简介 Hadoop是Apache软件基金会旗下的一个开源分布式计算平台,为用户提供了系统底层细节透明的分布式基础架构.它是基于java语言开发的,具有很好的跨平台特性,其核心是分布式文件系 ...

  7. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 在脚本中使用MonoBehaviour

    继上次分析了热更新的Demo后,这次来介绍如何在热更新代码中使用MonoBehaviour. MonoBehaviour挂载到GameObject对象上的脚本的基类.平常Unity开发时,简单的做法就 ...

  8. [LeetCode] Strange Printer 奇怪的打印机

    There is a strange printer with the following two special requirements: The printer can only print a ...

  9. Struts2--标签tag

    在Struts2框架中提供了一套标签库,可以与struts2无缝结合. 数据标签a.action.bean.date.debug.i18n.include.param.property.push.se ...

  10. [HNOI2010]弹飞绵羊

    Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...