最近看了很多关于缓存的文章, 每次看完,看似明白但是实际还是没明白,这次总算搞明白协商缓存是怎么回事了

首先,服务器缓存分强制缓存和协商缓存(也叫对比缓存)

强制缓存一般是服务端在请求头携带字段Expires 来指定过期时间,不过这个字段已经是HTTP1的字段了(也可以使用);

强制缓存还有一个字段是Cache-Control : 这个字段主要值有 no-store no-cache max-age等来设置强制缓存(max-age来设置资源的过期时间)

下面重点需要搞明白的是协商缓存,也就是对比缓存

① 协商缓存发生在强制缓存失效之后,浏览器根据缓存标识决定是否使用缓存的过程

②协商缓存发生的过程如下:

 1. 通过  Last-Modified值,和If-Modify-Since字段 判断是否要缓存

-浏览器第一次请求    这时候不会携带缓存标识

-服务器第一次返回    这个时候服务端设置响应头  Last-Modified , 值为最后一次修改时间

-浏览器第一次接收到响应   接收到服务器设置的响应头  响应体等

- 浏览器第二次请求  这个时候浏览器会先检测到Last-Modified 字段,于是发送请求的时候携带If-Modified-Since 请求头,值就是浏览器第一次返回回来的Last-Modified的值;

-服务器第二次接受到请求  这个时候会对比这个值和服务器中这个资源修改时间;如果没有变化则直接返回携带304的响应头和空的响应体,浏览器则直接读取缓存,如果不等(小于服务器上的这个修改时间),说明文件有更新,返回新的资源

-这样缓存目的就达到了

2. 通过浏览器携带的If-None-Match字段和Etag 值判断是否需要缓存

-浏览器第一次请求  这个时候请求头不会携带缓存标识

-服务器第一次响应  这个时候响应头携带Etag字段,值为改资源文件唯一标识(这个值生成有一定规则 掘金有文章写的是last_modified 与 content_length组成

- 浏览器第二次发起请求  这个时候浏览器请求头携带If-None-Match字段,值为Etag的值

- 服务器接受到这个请求字段之后,把If-None-Match的值和这个资源的Etag值进行比较,如果不同,则会返回完整的报文信息;如果一致,则只返回带304的响应头,浏览器在缓存中读取缓存的资源

搞明白的方法还是自己笔和纸画出来的,嗯 ,加油;

一篇文章带你整明白HTTP缓存知识的更多相关文章

  1. MYSQL(进阶篇)——一篇文章带你深入掌握MYSQL

    MYSQL(进阶篇)--一篇文章带你深入掌握MYSQL 我们在上篇文章中已经学习了MYSQL的基本语法和概念 在这篇文章中我们将讲解底层结构和一些新的语法帮助你更好的运用MYSQL 温馨提醒:该文章大 ...

  2. MYSQL(基本篇)——一篇文章带你走进MYSQL的奇妙世界

    MYSQL(基本篇)--一篇文章带你走进MYSQL的奇妙世界 MYSQL算是我们程序员必不可少的一份求职工具了 无论在什么岗位,我们都可以看到应聘要求上所书写的"精通MYSQL等数据库及优化 ...

  3. 一篇文章带你掌握主流数据库框架——MyBatis

    一篇文章带你掌握主流数据库框架--MyBatis MyBatis 是一款优秀的持久层框架,它支持自定义 SQL.存储过程以及高级映射. 在之前的文章中我们学习了MYSQL和JDBC,但是这些东西远远不 ...

  4. 一篇文章带你掌握主流基础框架——Spring

    一篇文章带你掌握主流基础框架--Spring 这篇文章中我们将会介绍Spring的框架以及本体内容,包括核心容器,注解开发,AOP以及事务等内容 那么简单说明一下Spring的必要性: Spring技 ...

  5. 一篇文章带你掌握主流服务层框架——SpringMVC

    一篇文章带你掌握主流服务层框架--SpringMVC 在之前的文章中我们已经学习了Spring的基本内容,SpringMVC隶属于Spring的一部分内容 但由于SpringMVC完全针对于服务层使用 ...

  6. 一篇文章带你了解NoSql数据库——Redis简单入门

    一篇文章带你了解NoSql数据库--Redis简单入门 Redis是一个基于内存的key-value结构数据库 我们会利用其内存存储速度快,读写性能高的特点去完成企业中的一些热门数据的储存信息 在本篇 ...

  7. 一篇文章带你了解轻量级Web服务器——Nginx简单入门

    一篇文章带你了解轻量级Web服务器--Nginx简单入门 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件代理服务器 在本篇中我们会简单介绍Nginx的特点,安装,相关指令使用以及配置信 ...

  8. 一篇文章带你掌握主流办公框架——SpringBoot

    一篇文章带你掌握主流办公框架--SpringBoot 在之前的文章中我们已经学习了SSM的全部内容以及相关整合 SSM是Spring的产品,主要用来简化开发,但我们现在所介绍的这款框架--Spring ...

  9. 一篇文章带你掌握MyBatis简化框架——MyBatisPlus

    一篇文章带你掌握MyBatis简化框架--MyBatisPlus 我们在前面的文章中已经学习了目前开发所需的主流框架 类似于我们所学习的SpringBoot框架用于简化Spring开发,我们的国人大大 ...

随机推荐

  1. ARP攻击的发现、攻击原理、攻击方式、防护,竟然这么简单?!

    ARP协议概述 ARP协议(address resolution protocol)地址解析协议. 一台主机和另一台主机通信,要知道目标的IP地址,但是在局域网中传输数据的网卡却不能直接识别IP地址, ...

  2. swoole 聊天室

    1:宝塔终端安装php 2:宝塔终端检测是否安装好 php-v 3:宝塔面板安装swoole扩展,终端检测 php -m  查看扩展 扩展已经安装完毕

  3. C盘爆满,你的专属清道夫来啦

    一.C盘目录介绍 ■ 本人电脑信息:联想拯救者Win10 家庭版 1.C盘根目录默认目录情况: Intel:装Intel驱动,解压文件的临时文件,之前百度了解到它是一个有关Intel芯片信息的文件,可 ...

  4. JSP 表单提交 数据库乱码解决方法

    问题:有时候在做jsp逻辑处理时,比如提交表单,从前台注册的页面提交了一部分的数据,但是后面处理的JSP页面通过 request.getParameter 调用时,获取到的是一堆乱码. 乱码分析:因为 ...

  5. 安全学习笔记-web安全之XSS攻击

    web安全之XSS攻击 XSS 即跨站脚本攻击,是 OWASP TOP10 之一.它的全称为 Cross-site scripting,因为 CSS 这个简称已经被占用表示为前端三剑客之一的CSS,所 ...

  6. Bellman-Ford算法 求有边数限制的最短路

    这个算法也是紧承我们之前讲过的关于图论的内容,我们在前面分析图的时候说过了对于不同的图论问题,我们会有不同的求解方法,那么这里我们讲到Bellman-Ford算法是用于解决有边数限制的求解最短路问题. ...

  7. Three.js 火焰效果实现艾尔登法环动态logo 🔥

    声明:本文涉及图文和模型素材仅用于个人学习.研究和欣赏,请勿二次修改.非法传播.转载.出版.商用.及进行其他获利行为. 背景 <艾尔登法环>是最近比较火的一款游戏,观察可以发现它的 Log ...

  8. Docker——常用命令

    常用命令 docker version # 显示docker的版本信息 docker info # 显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help # 帮助命令,中 ...

  9. 运营商的三大数据域——B域,O域,M域

    O域(运营域).B域(业务域).M域(管理域)特指电信行业大数据领域的三大数据域. B域(业务域)= business support system的数据域, O域(运营域)= operation s ...

  10. Apache+PHP+Mysql安装手册(Windows)

    一,准备安装包 下载地址: Apache:HTTPS://www.apachelounge.com/download/ PHP:http://php.net/downloads.php MySQL h ...