浅谈Web缓存

news2024/11/15 8:49:58

Web缓存分为两类

  • http缓存
  • 浏览器缓存

1、缓存位置

  • Service Worker
  • Memory Cache
  • Disk Cache
  • Push Cache

2、浏览器缓存分为三类

  • cookie
  • localStrorage
  • sessionStorage
    cookie的最大容量为4kb, localStorage, sessionStorage容量为5M
    localStorage可永久存储, 除非调用API删除或手动删除
    sessionStorage关闭浏览器即可清除

3、http缓存分为两类

  • 强制缓存: 不经过服务器,直接从缓存中读取数据
  • 协商缓存: 向服务器发送请求,由服务器决定是从缓存中读取数据,还是由服务器返回新的数据

3.1 浏览器请求过程

我用浏览器搜索一个问题,浏览器首先就会向本地缓存发送一个HTTP请求,由于我是第一次请求此数据,缓存中必然是没有记录的,没有命中缓存,接着浏览器向服务器发送HTTP请求,服务器发出响应,响应头中包含缓存标识,浏览器将请求结果存入浏览器缓存中,并进行数据解析与页面渲染。

3.2 强缓存

3.2.1 与强缓存有关的响应头:
expires: 缓存资源到期的时间, 这个时间之前就是取的缓存数据
缺点: 本机时间可被修改, 不准确
catch-control: 规定缓存资源的有效时间, 例如max-age=2592000
若过期的话, 就走协商缓存
在这里插入图片描述

3.3协商缓存

3.3.1 与协商缓存有关的响应头与请求头
在这里插入图片描述

3.3.1.1 响应头:Last-Modified 请求头:If-Modified-Since
Last-Modified:资源的最后修改时间
服务器在响应时,会有一个Last-Modified的响应头,浏览器下次请求时,If-Modified-Since的值就会设为服务器上次响应的Last-Modified的值,请求到达服务器时,服务器就会根据这个值与服务器端资源更新时间进行比对,如果自上一次响应后资源未更新,则返回状态码304,表示资源未更新,可以直接从缓存中取数据,浏览器收到304后,就去缓存中取数据。如果比对后发现自上次响应后,服务器资源有更新,则返回200状态码,重新从服务器中响应数据和缓存标识等,存入浏览器缓存。

缺点:Last-Modified的值精确到秒,若在秒内发生资源更新,则可能导致浏览器依旧从缓存中读取数据。
在这里插入图片描述

3.3.1.2 响应头:ETag 请求头:If-None-Match
ETag:若服务器资源更新,则ETag也会更新
在这里插入图片描述

流程与Last-Modified/If-Modified-Since一致,解决了秒内发生资源更新,无法识别的问题

3.3.2 两者比较
优先使用 Etag。
Last-Modified 只能精确到秒级。
如果资源被重复生成,而内容不变,则 Etag 更精确。

4 三种刷新操作对 http 缓存的影响

正常操作:地址栏输入 url,跳转链接,前进后退等。
手动刷新:f5,点击刷新按钮,右键菜单刷新。
强制刷新:ctrl + f5,shift+command+r。

正常操作:强制缓存有效,协商缓存有效。
手动刷新:强制缓存失效,协商缓存有效。
强制刷新:强制缓存失效,协商缓存失效。

5 总结

在这里插入图片描述

浏览器每次请求时,首先判断是否有缓存,若无缓存则向服务器发送请求,并将响应结果存至缓存。

若有缓存,第一选择都是走强缓存——直接访问浏览器缓存,若缓存数据有效(评判指标:有效时间,依据:Expires或Cache-Control)则直接从缓存返回数据;若缓存数据无效,则走协商缓存(解决服务器端有资源更新的问题)。

协商缓存的要点就是判断资源有无更新(依据:Last-Modified/If-Modified-Since,ETag/If-None-Match)。若无更新(304),依旧从缓存中返回数据,若有更新(200),则从服务器返回数据,并更新缓存。

参考资料
http 缓存
浏览器缓存——强缓存与协商缓存

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

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

相关文章

【Linux编译器-gcc/g++使用】

1. 背景知识1. 预处理()2. 编译()3. 汇编()4. 连接()有关具体详解可以参照这篇博客:程序环境与预处理2. gcc如何完成格式 gcc [选项] 要编译的文件 [选项] [目标文件]2.1预处理📙功能&#x1f4…

11_1、Java集合概述

一、Java集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊 端,而Java 集合就像一种容器,可以动…

【自学Java】Java语言数组赋值

Java语言数组赋值 Java数组赋值教程 在 Java 语言 中,给 数组 赋值,就相当于给每个位置上的对应的位置填充数据。 Java语言数组赋值详解 Java 中的数据赋值分为动态化赋值和静态化赋值两种赋值方式。动态化赋值指的是先定义数组,然后指定…

Unity github发布 和 gitignore文件的详细设置

你做了一个unity项目 想给他提到github上去 如果你是windows 他会不停提示你 warning: LF will be replaced by CRLF in ***** The file will have its original line endings in your working directory 提示这个是因为 windows和其他平台的换行符不一样导致的 git想给你改换行…

PDF转换成Word转换器,这个软件实在太好用了!

在办公中我们会发现,我们每天需要处理的文件实在是太多了。大部分时间里我们都在跟各种各样的文件打交道,有部分文件内容很接近,甚至只是转换了输出格式而已,其具体内容并没有发生改动。那当我们想要直接使用它的另一种格式的时候…

ArcGIS三维制作步骤发布时间:

ArcGIS三维制作步骤发布时间:2018-01-17 版权:同步视频教程(一):http://www.bigemap.com/video/play2018022687.html(二):http://www.bigemap.com/video/play2018022686.html(三&…

电脑死机怎么办?超级简单的方法

当我们的电脑运行多个软件的时候,就会很容易发生死机。如果是台式电脑,我们可以通过按重启按钮,或者是通过直接拔电源来解决死机的问题。 如果是笔记本电脑,我们怎么按鼠标或者电脑的键盘,它都没有反应。电脑死机怎么…

Ubuntu 20.04源码编译安装OpenCV 4.7.0

目录 前言 1--下载OpenCV 4.7.0 2--编译安装OpenCV 4.7.0 3--测试 3-1--查看安装的版本 3-2--基于VSCode和CMake测试项目 4--报错解决(重点!) 4-1--OpenCV与FFmpeg不兼容 4-2--LIBTIFF报错 4-3--系统与Anaconda的库lib冲突 4-4--测…

MATLAB-罗盘图绘制

compass 函数用于绘制罗盘图,利用直角坐标系,在圆形栅格上绘制图形,整个形状类似一个“罗盘”,具体使用格式如下。1 ) compass( x , y):函数绘制一个由原点出发、由(x ,y)组成的向量箭头图形。2 ) compass( z):等价于compass( rea…

6步速通:修复损坏的word文件

前两天,老师找到我,想让我帮忙修复一个打不开的docx文档。症状大概是这样: 打开文件的时候花了较长时间,并且显示了乱码,并且老师使用WPS自带的文档修复功能也无法修复。 遇到这个情况,到底怎么办呢&#…

【填坑向】我可能也就是踩了dockrfile部署jar包(需读取resource目录下的文件)全部的坑吧。。。

FileNotFoundException。。没错、这篇还是从读取的文件找不到的问题开始,今天来个终极版( ̄∇ ̄)/一开始我把要读取的文件放在了项目根路径,package就没把它打进去,显然是找不到的,于是我把这个JSON文件移到了…

数据智能时代的营销新玩法RTA,你了解吗?|极客星球

近日,由国内知名产品经理社区PMTalk和MobTech联合举办的“从0到1深入产品运营方法论”沙龙活动圆满落幕,MobTech袤博科技开发者平台副总裁陆俊超在会上分享了RTA产品如何全方位提升用户增长效能。 RTA应运而生 在流量红利日益消退的环境下,…

中台KPI怎么设计?

在中台系统建设完毕之后,中台战略在一家企业中的落地工作就算完成了。 此时,我们必须有准确的指标来反映该战略的实际效果,因此就需要对中台战略在企业运作中的效益进行持续化的监测与评估。 行动点: (1&#xff09…

app嵌入新功能,一键接入(内含低代码平台)

在app的开发运营中,有时会需要跟随着用户的使用习惯来进行业务上的更新迭代,比如说新增或删减部分功能,或是调整应用功能布局,优化组件分区,以达到更简洁的效果。那么对应的会有低代码平台提供一些通用组件&#xff0c…

机器学习--决策树、线性模型、随机梯度下降

目录 一、决策树 二、线性模型 三、随机梯度下降 一、决策树 决策树(decision tree):是一种基本的分类与回归方法,此处主要讨论分类的决策树。 在分类问题中,表示基于特征对实例进行分类的过程,可以认为…

带你玩转指针——指针进阶(一)

指针的概念:指针就是变量,用来存放地址指针的大小是固定的4/8个字节(32位平台/64位平台)指针也是有类型的,指针类型决定了-步长,指针解引用时的权限字符指针在前面的学习我们知道了字符指针的初阶应用假如是…

xxljob 调度中心项目 调度一个方法到我们自己的项目,他是咋执行的

目录 1 需求2 实现1 需求 xxljob 调度中心项目 调度一个方法到我们自己的项目,他是咋执行的 2 实现 我们的项目首先是netty 服务器接收到,然后转发到run方法里面 核心就是下面的这个map对象 // 任务启动之后,时间一到就 创建一个 JobThread ,就放到这个priva…

【Linux kernel 文件系统入门及渐进 1 -- sysfs 介绍】

文章目录1.1 Sysfs 介绍1.1.1 kobject 产生背景1.1.2 主要的数据结构1.1.3 数据结构实现1.2 attribute 的功能概述1.2.1 struct attribute 实现1.2.2 attribute 文件的创建1.2.3 attibute 文件的 read 和 write1.1 Sysfs 介绍 Sysfs 是一个基于 RAM 的文件系统,它和…

如何优化.so mmap内存占用

1)如何优化.so mmap内存占用 ​2)模拟器下物理碰撞失效 3)Unity RenderTexture的释放在安卓上并不能使GL内存完全回落 4)数字人中,怎么做到胡子固定在嘴巴皮肤上 这是第319篇UWA技术知识分享的推送。今天我们继续为大家…

docker容器入门介绍

一、什么是docker容器 容器(Container)是基于镜像创建的运行实例,一个容器中可以运行一个或多个应用程序(jdk开发的java应用 程序)。 Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打…