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比其他标签中打开文件,所有的磁盘的读 ...
随机推荐
- Java-NIO(七):阻塞IO与非阻塞IO
阻塞IO 传统的 IO 流都是阻塞式的. 也就是说,当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务. 因此,在完成网络通信 ...
- Java-NIO(三):直接缓冲区与非直接缓冲区
直接缓冲区与非直接缓冲区的概念: 1)非直接缓冲区:通过 static ByteBuffer allocate(int capacity) 创建的缓冲区,在JVM中内存中创建,在每次调用基础操作系统的 ...
- 追女神助手v0.1
#-*-coding:utf8-*- import smtplib from email.mime.text import MIMEText import requests from lxml imp ...
- transform做2d和3d变形(css动画一)
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 有段时间我是没理清transform.translate.transition和animation之间的关 ...
- mysql数据库--explain(查询表是否走索引)各个字段含义
1.1 id列 数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它来进行查询. 1.2 select_type列 常见的有: ◆ simp ...
- maven中scope标签以及exclusions 记录
scope的分类 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖.打包的时候通常需要包含进去 2.test:依赖项目仅仅参与 ...
- 【转】操作系统 gdt ldt
GDT的由来: 在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT?我们首先考虑一下在Real Mo ...
- [LeetCode] Second Minimum Node In a Binary Tree 二叉树中第二小的结点
Given a non-empty special binary tree consisting of nodes with the non-negative value, where each no ...
- java String的各种方法及操作
No. 方法名称 功能 字符与字符串 01 public String(char[] value) 将字符数组中所有内容变为字符串 02 public String(char[] value,int ...
- [HDU 2036]改革春风吹满地
Description “ 改革春风吹满地,不会AC没关系;实在不行回老家,还有一亩三分地.谢谢!(乐队奏乐)”话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然 ...