web缓存之--http缓存机制
一、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缓存机制的更多相关文章
- System.Web.Caching.Cache类 缓存 各种缓存依赖
原文:System.Web.Caching.Cache类 缓存 各种缓存依赖 Cache类,是一个用于缓存常用信息的类.HttpRuntime.Cache以及HttpContext.Current.C ...
- 005-优化web请求一-gzip压缩、http缓存控制和缓存校验[Pragma、Expires、Cache-Control、max-age、Last-Modified、用户刷新访问、避免过度304]
优化Web应用的典型技术:缓存控制头信息.Gzip.应用缓存.ETag.反应型技术[异步方法调用和WebSocket] 一.模板缓存 spring.thymeleaf.cache=true sprin ...
- System.Web.Caching.Cache类 缓存 各种缓存依赖(转)
转自:http://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntime ...
- Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群
Redis总结(五)缓存雪崩和缓存穿透等问题 前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...
- 说说web缓存-强缓存、协商缓存
网上关于WEB缓存的文章很多,今天汇总一下. 为什么要用缓存 一般针对静态资源如CSS,JS,图片等使用缓存,原因如下: 请求更快:通过将内容缓存在本地浏览器或距离最近的缓存服务器(如CDN),在不影 ...
- 【Web技术】276- WebView缓存原理分析和应用
前言 混合式开发,在产品体验以及页面加载速度的体验上已经非比以往的.今日早读文章由@unclechen分享. 正文从这开始- 一.背景 现在的App开发,或多或少都会用到Hybrid模式,到了WebV ...
- C# System.Web.Caching.Cache类 缓存 各种缓存依赖
原文:https://www.cnblogs.com/kissdodog/archive/2013/05/07/3064895.html Cache类,是一个用于缓存常用信息的类.HttpRuntim ...
- Web前后端缓存技术(缓存的主要作用是什么)
Web前后端缓存技术Web前后端缓存技术(缓存的主要作用是什么) 一.总结 一句话总结: 加快页面打开速度 减少网络带宽消耗 降低服务器压力 1.在Web应用中,应用缓存的地方有哪些? 主要有浏览器缓 ...
- 如何构建高性能web网站:分布式缓存
一.数据库前端缓冲区 要清除数据库前缓冲区,首先必须明确什么是文件系统的内核缓冲区(Buffer Area):它位于内核的物理内存地址空间,除了使用O_DIRECT比其他标签中打开文件,所有的磁盘的读 ...
随机推荐
- Docker学习笔记 - Docker数据卷的备份和还原
学习目标: 备份数据卷 还原数据卷 # 通过容器备份数据卷容器中的数据卷 docker run --volumes-from dvt5 -v ~/backup:/backup --name dvt10 ...
- Spring MVC拦截器的配置
最近在用SpringMVC,想用它的拦截器,但是配置了几次都不成功了,最后翻阅了不少文章终于成功了,遂记录于此,以方便他人. 首先引入命名空间: xmlns:mvc="http://www. ...
- 【第二十一篇】手C# MVC 微信授权登录 OAuth2.0授权登录
首先一定要熟读,最起码过一遍微信开发者文档 微信开发者文档 文档写的很清楚 授权登录四步走 在正文开始前,我得讲清楚一个事情 敲黑板,划重点:微信一共有两个 access_token 一个是7200就 ...
- JavaScript 重点笔记
JavaScript 重点笔记 ## 数组 // 必须掌握 - arr.length:获取数组元素的长度 - arr.splice(起始位置,长度):从数组中添加或删除元素. - arr.indexO ...
- ROS系统MoveIt玩转双臂机器人系列(一)
一.ROS系统的MoveIt模块简介 机器人操作系统ROS目前最受关注的两个模块是导航(Navigation)和机械臂控制(MoveIt!),其中,机械臂控制模块(后面简称MoveIt)可以让用户快速 ...
- HTML5入门必知
第一部分 认识HTML 一.认识HTML 1.HTML HTML:超文本标签语言Hyper Text Markup Language HTML:网页源代码. 浏览器:"解释和执行" ...
- python3全栈开发-内置函数补充,反射,元类,__str__,__del__,exec,type,__call__方法
一.内置函数补充 1.isinstance(obj,cls)检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() print(isinstan ...
- [LeetCode] Maximum Average Subarray I 子数组的最大平均值
Given an array consisting of n integers, find the contiguous subarray of given length k that has the ...
- [LeetCode] 01 Matrix 零一矩阵
Given a matrix consists of 0 and 1, find the distance of the nearest 0 for each cell. The distance b ...
- servlet与ajax数据交换(json格式)
JSON数据格式: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于的一个子集. JSON采用完全独 ...