一文搞懂浏览器缓存机制

news2024/11/16 3:49:17

文章目录

    • 概述
    • 强制缓存
    • 协商缓存
    • 总结
    • 参考文章

概述

浏览器的缓存机制也就是我们说的HTTP缓存机制,其机制是根据HTTP报文的缓存标识进行的

浏览器第一次向服务器发送HTTP请求, 浏览器拿到请求结果后,会根据响应报文的缓存标识,决定是否进行缓存。

我们可以看出

  1. 浏览器每次发送请求,都会先在浏览器中查找该请求的结果以及缓存标识
  2. 浏览器每次拿到结果都会将该结果和缓存标识存入浏览器缓存之中

我们根据是否向服务端再次发起HTTP请求和缓存过程分为两个部分,分别是强制缓存和协商缓存

我们先做一下简单解释:

  • 🌊强制缓存就是向浏览器缓存查找结果,并根据该结果的缓存规则来决定是否使用该缓存的结果
  • 🌊协商缓存就是强制缓存失效后,浏览器携带缓存标识向服务器发起请求,由服务器根据缓存标识决定是否使用缓存的过程

强制缓存

场景

  1. 不存在该缓存结果和缓存标识,强制缓存失效,则直接向服务器发起请求(跟第一次发起请求一致)
  2. 存在该缓存结果和缓存标识,但该结果已失效,强制缓存失效
  3. 存在该缓存结果和缓存标识,且该结果尚未失效,强制缓存生效

注意:场景在总结图中有体现

相关字段

  • Expires
    Expires是HTTP/1.0控制网页缓存的字段,其值为服务器返回该请求结果缓存的到期时间,即再次发起该请求时,如果客户端的时间小于Expires的值时,直接使用缓存结果
  • Cache-Control
    在HTTP/1.1中,Cache-Control是最重要的规则,主要用于控制网页缓存,主要取值为
    - public:所有内容都将被缓存(客户端和代理服务器都可缓存)
    - private:所有内容只有客户端可以缓存,Cache-Control的默认取值
    - no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
    - no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
    - max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效

拓展:内容缓存

我们需要了解内存缓存(from memory cache)和硬盘缓存(from disk cache),如下:

  1. 内存缓存(from memory cache):内存缓存具有两个特点,分别是快速读取和时效性:
  2. 快速读取:内存缓存会将编译解析后的文件,直接存入该进程的内存中,占据该进程一定的内存资源,以方便下次运行使用时的快速读取。
  3. 时效性:一旦该进程关闭,则该进程的内存则会清空。
  4. 硬盘缓存(from disk cache):硬盘缓存则是直接将缓存写入硬盘文件中,读取缓存需要对该缓存存放的硬盘文件进行I/O操作,然后重新解析该缓存内容,读取复杂,速度比内存缓存慢。

在浏览器中,浏览器会在js和图片等文件解析执行后直接存入内存缓存中,那么当刷新页面时只需直接从内存缓存中读取(from memory cache);而css文件则会存入硬盘文件中,所以每次渲染页面都需要从硬盘读取缓存(from disk cache)。

协商缓存

协商缓存失效,返回304

场景

  1. 协商缓存生效,返回304
    发送请求,浏览器缓存失效,会再向服务端发送请求,服务端进行返回结果,将请求结果和缓存标识存入浏览器中
  2. 协商缓存失效,返回200和请求结果结果
    与上面不同的是,服务端发现该资源没有变化,返回304,会继续向浏览器缓存获取结果(怎么发现该资源是否有变化,可以参考下面的相关字段Etag / If-None-Match)

注意:场景在总结图中有体现

相关字段

  • Last-Modified / If-Modified-Since
    Last-Modified是服务器响应请求时,返回该资源文件在服务器最后被修改的时间
  • Etag / If-None-Match
    Etag是服务器响应请求时,返回当前资源文件的一个唯一标识
    If-None-Match是客户端再次发起该请求时,携带上次请求返回的唯一标识Etag值,通过此字段值告诉服务器该资源上次请求返回的唯一标识值。服务器收到该请求后,发现该请求头中含有If-None-Match,则会根据If-None-Match的字段值与该资源在服务器的Etag值做对比,一致则返回304,代表资源无更新,继续使用缓存文件;不一致则重新返回资源文件,状态码为200

总结

强制缓存优先于协商缓存进行,若强制缓存(Expires和Cache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-Since和Etag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存

在这里插入图片描述

参考文章

彻底理解浏览器的缓存机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1486530.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习总结】什么是DoS和DDoS

[Q&A] 什么是DoS DoS 是 “Denial of Service”(拒绝服务)的缩写,它是一种网络攻击方式,其目的是使目标计算机或网络资源无法为合法用户提供正常的服务。通过向目标系统发送大量请求、消耗其带宽、处理器或内存等资源&#…

【Linux网络命令系列】ping curl telnet三剑客

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

前后端分离vue+nodejs高校教室资源预约管理系统4e80m

本系统的设计与实现共包含9个表:分别是配置文件信息表,教师信息表,教室类型信息表,教室信息信息表,教室预约信息表,系统公告信息表,token表信息表,用户表信息表,学生信息表&#xff…

matplotlib散点图

matplotlib散点图 假设通过爬虫你获取到了北京2016年3, 10月份每天白天的最高气温(分别位于列表a, b), 那么此时如何寻找出气温和随时间(天)变化的某种规律? from matplotlib import pyplot as pltx_3 range(1, 32) x_10 range(51, 82)y_3 [11,17,16,11,12,11,12,6,6,7,8…

二、数据结构——单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie,并查集,堆,哈希表等内容。

对于链表来说,由于new操作时间太长,因此,算法题中一般使用静态链表。 1.单链表 采用数组实现单链表,可以直接开两个数据,一个数组存放数值,另外一个数据存放下一个元素(指针)。 示…

klipper api测试脚本whconsole.py

1、whconsole.py简单介绍 whconsole.py用于测试klipper的对外接口api,其实是连接klipper的uds服务(Unix Domain Socket),官方也有介绍API 服务器 - Klipper 文档。 需要注意是的whconsole.py脚本启动不能使用Python3,…

想要调用淘宝开放平台API,没有申请应用怎么办?

用淘宝自定义API接口可以访问淘宝开放平台API。 custom-自定义API操作 taobao.custom 公共参数 注册账号获取API请求地址 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretString是调用密钥api_nameString是API接口名称&#xf…

【计算机网络】深度学习HTTPS协议

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【计算机网络】深度学习HTTPS协议 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一:HTTPS是什么二:HTTPS的工作过程三:对称加密四:非对称加密五:中间人攻击1…

精读《用 Babel 创造自定义 JS 语法》

1 引言 在写这次精读之前,我想谈谈前端精读可以为读者带来哪些价值,以及如何评判这些价值。 前端精读已经写到第 123 篇了,大家已经不必担心它突然停止更新,因为我已养成每周写一篇文章的习惯,而读者也养成了每周看一…

C++进阶(二) 多态

一、多态的概念 多态的概念:通俗来说,就是多种形态, 具体点就是去完成某个行为,当不同的对象去完成时会 产生出不同的状态。举个栗子:比如买票这个行为,当普通人买票时,是全价买票;学…

无人机镜头稳定的原理和相关算法

无人机的镜头稳定主要基于两个关键技术:镜头平衡技术和实时电子稳像。无人机镜头稳定的原理和相关算法主要是通过镜头平衡技术和实时电子稳像技术来保持摄像镜头的稳定性,从而拍摄出清晰、稳定的画面。无人机镜头稳定的原理主要是通过传感器和算法来实现…

基于SpringBoot的在线拍卖系统(附项目源码+论文)

摘要 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、留言板管理、系统管理,用户;首页、个人中心、历史竞拍管理、竞拍订单管理、留言板管理&#xff0…

SSH教程

ssh 是远程连接的利器, 可以说凡是涉及到 linux 服务器, ssh 就是一个绕不开的话题. 本文作为一个教程, 尽可能详细的帮助读者设置 ssh, 并给出一些常用的 ssh 配置方法 (主要用于 linux 系统的远程登录和文件传输). 1. 简介 ssh 分为两个部分, sshd 服务端和 ssh 客户端. ssh…

2.2 mul、div、and、or乘除指令及所有寄存器英文名

汇编语言 1. mul乘指令 两个相乘的数,要么都是8位,要么都是16位 两个8位数相乘 一个默认放在al中,另一个放在8位reg或内存字节单元中8位乘法,结果默认放在ax中例如:计算100*10 100和10小于255,可以做8位…

优选算法|【双指针】|1089.复写零

目录 题目描述 题目解析 算法原理讲解 代码 题目描述 1089. 复写零 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就…

基于图数据库构建知识图谱平台应用实践

▏摘要 中信证券基于分布式图数据库StellarDB,替代国外开源图数据库产品,打造全新的企业级知识图谱平台,应用于同一客户集团画像、科创板关联发现、风险事件报告、全球企业关联图谱、产业链图谱、投研图谱、反洗钱与稽核图谱、元数据图谱等应…

《程序员职业规划手册》学习笔记

《程序员职业规划手册》不是一本具体的书,而是由前阿里技术总监雪梅老师讲授的一个专栏课程,总共有20讲,内容基本都是图片和文字形式,也有对应的语音讲述。 回顾了下毕业工作的这几年,我买过很多学习课程,…

java八股文复习-----2024/03/03

1.接口和抽象类的区别 相似点: (1)接口和抽象类都不能被实例化 (2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法 不同点: (1)抽象类可以包含普通方法和代码块&#x…

openGauss学习笔记-234 openGauss性能调优-系统调优-资源负载管理-资源管理准备-设置控制组

文章目录 openGauss学习笔记-234 openGauss性能调优-系统调优-资源负载管理-资源管理准备-设置控制组234.1 背景信息234.2 前提条件234.3 操作步骤234.3.1 创建子Class控制组和Workload控制组234.3.2 更新控制组的资源配额234.3.3 删除控制组 234.4 查看控制组的信息 openGauss…

Docker的基本操作(黑马学习笔记)

镜像操作 镜像名称 首先来看下镜像的名称组成: ● 镜名称一般分两部分组成:[repository]:[tag]。 ● 在没有指定tag时,默认是latest,代表最新版本的镜像 如图: 这里的mysql就是repository,5.7就是tag&…