HTTP缓存有多种规则,根据是否需要重新向服务器发起请求来分类,我们将其分为两大类

  • 强制缓存
  • 对比缓存

流程

强制缓存流程如下

对比缓存流程如下

强制缓存

我们知道,强制缓存在数据为失效的情况下,可以直接使用缓存数据
在没有缓存数据的情况下,像浏览器请求数据时,服务器会将数据和缓存规则一并返回,缓存信息包含在响应header中
对于强制缓存来说,响应header中会有两个字段来表明失效规则Expires/cache-Control

  • Expires
    值为服务端返回的到期时间,在下一次请求时,如果请求时间小于服务端的到期时间,则直接使用缓存数据
    Expires是HTTP1.0的东西,现在默认浏览器均使用HTTP1.1,使用Cache- Control替代,所以他的作用基本被忽略
    另一个问题就是,到期时间是由服务端产生的,但是客户端可能和服务端时间有误差,就会导致缓存命中的误差
  • Cache-Control
    常见的取值有private、public、no-cache、max-age,no-store,默认为prvate

    • private:客户端可以缓存
    • public:客户端和代理服务器都可以缓存
    • max-age = xxx: 缓存内容将在xxx秒后失效
    • no-cache:缓存内容将在xxx秒失效
    • no-cache:需要使用对比缓存来验证缓存数据
    • no-store:所有内容都不会缓存,强制缓存,对比缓存都不会触发

      如图表示缓存在31536000(365天)内都不会失效,可以直接从缓存数据库获取数据,直接使用

对比缓存

需要进行比较判断才可以使用缓存
对比缓存生效时,状态码为304,且报文大小和请求时间大大减少,原因是服务端在进行表示比较后,只返回header部分,通过状态码通知客户端使用缓存,不再需要将报文主题部分返回给客户端
对于对比缓存来说,缓存标识的传递是我们需要着重了解的,他在请求header响应header间进行传递,分为两种标识传递

  • Last-Modified/If-Modified-Since

    • Last-Modified(响应头)
      在服务器响应请求时,告诉浏览器资源的最后修改时间
    • If-Modified-Since(请求头)
      通过此字段通知服务器上次请求时,服务器返回资源最后修改时间,服务器收到后与Last-Modified进行比对
      如果最后修改时间大于If-Modified-Since,说并被修改过,则响应整片资源内容,返回状态码200
      如果小于等于If-Modified-Since,说明资源无新修改,响应304,告知浏览器继续使用所保存的cache
  • If-Modified-Since
    • Etag:服务器响应请求后,告诉浏览器当前资源在服务器的唯一标识(声称规则由服务器确定)
    • If-None-Match:再次请求服务器时,通过此字段通知服务器客户端缓存数据的唯一标识,服务器收到后发现有If-None-Match,则与Etag比对
      不同:说明资源被修改过,则响应整片内容,返回200
      相同:说明资源未被修改,响应304,告知浏览器继续使用保存的cache

总结

参考文章
彻底弄懂HTTP缓存机制及原理
一文读懂http缓存(超详细)

【网络】http缓存机制相关推荐

  1. 网络:浏览器静态资源缓存机制

    一.前言 为什么需要缓存? 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一 ...

  2. 网络协议(12) 彻底弄懂HTTP缓存机制及原理

    前言 Http 缓存机制作为 web 性能优化的重要手段,对于从事 Web 开发的同学们来说,应该是知识体系库中的一个基础环节,同时对于有志成为前端架构师的同学来说是必备的知识技能. 但是对于很多前端 ...

  3. 微服务架构下静态数据通用缓存机制

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 |  my.oschina.net/u/3971241/bl ...

  4. 微服务架构下的静态数据通用缓存机制!

    什么是静态数据 为什么需要缓存 通用缓存机制 总结 后记 在分布式系统中,特别是最近很火的微服务架构下,有没有或者能不能总结出一个业务静态数据的通用缓存处理机制或方案,这篇文章将结合一些实际的研发经验 ...

  5. 互联网协议 — DNS 缓存机制

    目录 文章目录 目录 DNS 缓存机制 基于缓存的 DNS 域名解析流程 DNS 缓存使用面临的问题 互联网环境缓存应用面临的问题 企业内网缓存应用面临的问题 DNS 缓存在实际应用中的考虑 主动操作 ...

  6. 清除浏览器缓存之后为什么还是显示旧的html页面_H5缓存机制浅析-移动端Web加载性能优化...

    1 H5缓存机制介绍 H5,即HTML5,是新一代的HTML标准,加入很多新的特性.离线存储(也可称为缓存机制)是其中一个非常重要的特性.H5引入的离线存储,这意味着 web 应用可进行缓存,并可在没 ...

  7. max点缓存烘焙帧_深入理解浏览器的缓存机制

    一.前言 缓存可以说是性能优化中简单高效的一种优化方式了.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟,并且由于缓存文件可以重复利用,还可以减少带宽,降低网络负荷. 对于一个数据请求来说,可 ...

  8. 九种浏览器端缓存机制知多少(转)

    浏览器缓存(Browser Caching)是浏览器端保存数据用于快速读取或避免重复资源请求的优化机制,有效的缓存使用可以避免重复的网络请求和浏览器快速地读取本地数据,整体上加速网页展示给用户.浏览器 ...

  9. 微服务架构下,静态数据通用缓存机制!

    本文转自:波斯码 链接:https://blog.bossma.cn/architecture/microservice-business-static-data-universal-cache-me ...

最新文章

  1. Apache+MySQL+PHP安装指南
  2. 怎样一步一步删除(linux amp; UNIX)环境下 oracle 11g 集群节点
  3. python:pandas之read_csv
  4. Oracle Enterprise Manager简介
  5. RabbitMQ Topic交换机(生产者)
  6. 4. time datetime 时间模块
  7. 软件测试用例设计方法之边界值分析法
  8. Java中Jsp和Servlet上传和下载文件
  9. python 爬虫,起点完结榜前100榜单
  10. 使用java将String类型的json转为json对象并进行取出响应的值
  11. VMware vSphere 5.x 与 vSphere 6.0各版本功能特性对比
  12. Java基础:Collections
  13. java 数组优化_Java数组的jit优化问题?
  14. 【python写一个无限弹窗】
  15. UKEY开发 用户登录流程
  16. Linux学习笔记——SecureCRT 8版本中文破解版
  17. 对研发团队里技术分享的一些思考
  18. 女生学UI合适吗?橙色优学告诉你女生UI设计优势
  19. matlab应用最简差分格式,泊松方程有限差分格式的构造以及MATLAB实现.docx
  20. 筹码底部共振(同花顺指标 副图 源码 测试图)

热门文章

  1. 2020,搞个 Mac 玩玩!
  2. DOCX4J 解析DOCX文档字体格式
  3. 从CPU与GPU利用率,到GPU与CPU差别的思考
  4. 微信小程序与Node服务器 Socket通讯
  5. CSS学习(05结构伪类选择器 浮动及清除)
  6. cvWaitKey使用
  7. 【python教程入门学习】Python的运算对象、运算符、表达式和语句
  8. L58.linux命令每日一练 -- 第九章 Linux进程管理命令 -- pgrep和kill
  9. 阿里高级技术专家宋意:平凡人在阿里十年的成长之旅
  10. php项目接入xxl-job调度系统的示例详解