前端网络---http缓存

什么是http缓存?

1、HTTP 缓存会存储与请求关联的响应,并将存储的响应复用于后续请求。

2、缓存的原理是在首次请求后保存一份请求资源的响应副本,当用户再次发起相同请求时,判断缓存是否命中,如果命中则将前面的响应副本返回给用户

3、使用缓存可以减少HTTP请求的数量,减少HTTP响应的大小,使web页面加载得更快。

memory cache和disk cache

memory cache:即内存缓存,存储在浏览器内存中,在访问页面后,再次刷新页面,可以发现很多数据来自Memory Cache(即内存缓存)

优点:

1、获取速度快;优先级高,当资源加载时,浏览器率先查找内存(memory cache)是否存在,存在则直接加载,不存在则找磁盘(disk cache)是否存在,存在则获取,不存在就进行网络请求。

缺点:

1、生命周期短,当网页的tab页面被关闭后(刷新不会),内存就会释放;且计算机内存的大小有限

disk cache:即磁盘缓存,存储在计算机硬盘中

优点:

1、存储容量大;生命周期长,只要不删除就一直存在

缺点:

1、读取速度相对memory cache较慢

http缓存方式

1、http缓存分为两种缓存,分别是强制缓存协商缓存

2、强缓存的优先级比协商缓存高

缓存图解,下面详细分析

http缓存---强制缓存

强制缓存过程:

客户端请求数据时判断有没有缓存数据存在,存在的话再判断缓存数据有没有过期,如果没有过期则直接使用缓存数据,无需与服务端进行通信

判断缓存是否过期是关键,下面就开始了

http1.0实现强制缓存的方法

如上图所示,Web服务器使用Expires响应头来告诉Web客户端它可以使用某个资源的缓存数据(副本)直到指定的时间为止

缺点:

Expires时间是服务端的时间,浏览器会将其与客户端的时间进行比对,这就可能导致客户端的时间和服务端的时间不一致,因为用户可以随意修改客户端的时间,这就会导致缓存命中的误差。

http1.1实现强制缓存的方法

引进了Cache-Control头来克服Expires头的限制

Cache-Control的常用属性有

1、max-age

1.1、可以指定缓存的生命周期(即被缓存多久)。它以秒为单位定义来一个更新窗。

1.2、Cache-Control是HTTP1.1的产物,其优先级比Expires高。如果两者同时出现,HTTP规范规定Cache-Control的max-age指令将重写Expires头。

2、private/public

2.1、public表示该响应可以被任何对象(包括:发送请求的客户端、代理服务器等等)缓存

2.2、private:私有缓存,表示该响应只能被发送请求的客户端缓存,而代理服务器等等其他不能缓存

2.3、private/public 未设置时,默认为private

3、no-cache

3.1、no-cache 不是禁止一切缓存的意思,而是强制客户端向服务端发送请求判断资源是否变更,变更则返回变更后的数据,未变更则返回304。即no-cache是禁止没有重新验证的情况下使用缓存,可以理解为不使用强缓存,使用协商缓存

4、no-store

4.1、no-store 表示该响应禁用缓存,不将响应存储在任何缓存中。

5、s-maxage

5.1、s-maxage:“s”表示共享,该字段和max-age类似,用于设置缓存时长,优先级高于max-age或Expires,但该字段仅在代理服务器(如CDN等)生效,仅当设置了public才有效。

http缓存---协商缓存

协商缓存过程:

强缓存的优先级比协商缓存高。当强制缓存没有命中(例如max-age过期),或者Cache-Control设置了no-cache(上文说到的),则开始进行协商缓存。

使用协商缓存时,客户端会携带缓存数据标识会向服务端发送一个请求,服务端识别对应的数据是否失效,如果未失效则返回304状态码,通知客户端比对成功,可以使用缓存数据。如果失效则返回最新数据,状态码为200。

下面就是协商缓存的具体分析

HTTP1.0实现协商缓存的方法------Last-Modified和If-Modified-Since

1、客户端首次请求一个资源时,服务端返回的header中如果有加上Last-Modified,其表示该资源的最后修改时间

2、那么当客户端后续再次请求该资源时,会在发送的请求头中携带If-Modified-Since,其值和之前返回的Last-Modified一致

3、服务端就会收到If-Modified-Since值,再根据资源最新的最后修改时间进行判断缓存是否失效。如果缓存命中(缓存有效),则返回空响应体, 状态码为304,也不会返回Last-Modified字段。如果缓存失效,则返回最新数据,并返回Last-Modified字段,状态码为200。

缺点:

1、Last-Modified和If-Modified-Since的检查时间最小单位是秒,如果资源在一秒以下的时间完成了更新,则资源最后修改时间(Last-Modified)不变,但实际资源已经变了,这时客户端的缓存是失效的,然而这种情况服务端依然会判断缓存命中。

2、如果资源进行了编辑操作,但是实际资源的内容没有修改,这时最后修改时间(Last-Modified)变了,这种情况服务端判断缓存失效,重新返回了新数据。而实际上是不需要的,因为文件内容没变。

HTTP1.1实现协商缓存的方法------Etag和If-None-Match

1、Etag是由服务端生成的用于标识资源的唯一标识符。

2、浏览器首次请求一个资源时,服务端根据资源内容生成一段hash字符串,加在返回的header中的Etag字段上,如下图

3、当客户端后续再次请求该资源时,会在发送的请求头中携带If-None-Match,其值和之前返回的Etag一致。

4、服务端就会收到If-None-Match值,并再次读取资源内容的Etag值进行匹配。如果缓存命中(缓存有效),则返回空响应体, 状态码为304。如果匹配失败,则缓存失效,返回最新数据,包括新的Etag字段,状态码为200。

5、Etag和If-None-Match的校验优先级比Last-Modified和If-Modified-Since高。

缺点:

1、但是由于Etag的生成需要服务端的计算开销,资源越大越多,开销就越重,会影响服务端的性能

浏览器用户行为和缓存

1、地址栏回车、页面链接跳转、页面前进/后退等等这些用户行为都是按照正常的缓存检查流程进行

2、而当用户点击刷新按钮时,浏览器会对本地的缓存文件过期,但是If-Modified-Since和If-None-Match还是会带上,意味着还是可能进行协商缓存

3、当用户进行强制刷新的操作时,浏览器不仅会对本地的缓存文件过期,而且也不会带上If-Modified-Since和If-None-Match,意味着相当于全部重新第一次请求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何保障UDP传输中数据文件不丢失?

UDP协议因其低时延和高速传输的特性,在实时应用和大量数据传输领域中发挥着不可或缺的作用。但是,由于UDP是一种无连接的通讯协议,它并不确保数据包的顺序、完整性和可靠性。 为了解决UDP传输中数据一致性的问题,技术专家们进行了…

HTML不常用的文本标签

1.标签如下&#xff1a; 代码及相关内容 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>不常用的文…

2024第二十一届五一数学建模C题思路 五一杯建模思路

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

大数据测试:构建Hadoop和Spark分布式HA运行环境

随着大数据技术的不断发展&#xff0c;Hadoop和Spark已成为处理大规模数据的热门框架。在生产环境中&#xff0c;高可用性&#xff08;HA&#xff09;是至关重要的&#xff0c;以确保数据处理和分析任务不受中断。本文将详细介绍如何构建 Hadoop和Spark分布式HA运行环境&#x…

Ubuntu 22.04 配置VirtualBox安装Windows 10虚拟机

Ubuntu 22.04 配置VirtualBox安装Windows 10虚拟机 文章目录 Ubuntu 22.04 配置VirtualBox安装Windows 10虚拟机1.安装virtualbox2.下载Window.iso文件并载入3.问题解决3.1 Kernel driver not installed (rc-1908)3.2 VT-x is disabled in the BIOS for all CPU modes 4.安装Wi…

中文编程入门(Lua5.4.6中文版)第十三章 Lua 文件操作

在《Lua世界》的冒险旅途中&#xff0c;勇士们时常需要与神秘的文本卷轴打交道。为了更好地掌握这些知识宝藏&#xff0c;Lua I/O库提供了两种强大的探索模式&#xff1a;简单模式和完全模式&#xff0c;助你轻松应对各类文献挑战。 简单模式&#xff1a;初识卷轴 简单模式如…

如何精心挑选合适的软件公司

选择一家合适的软件公司对于小程序商城的开发与运营而言&#xff0c;具有举足轻重的意义。面对市场上琳琅满目的软件公司&#xff0c;如何找到那个真正适合自己的合作伙伴呢&#xff1f;接下来&#xff0c;我们将从需求分析、公司资质、项目案例、服务态度和成本效益五个方面&a…

Linux0.11 源码中的内存分页机制

学习Linux的源码&#xff0c;《深入linux 内核架构》这本书看起来就让人害怕&#xff0c;然后就想着看看早期的linux版本的源码&#xff0c;从网上查看资料发现linux0.11 这个版本有很多人拿来当成教学版本&#xff0c;而且也有很多的参考书以这个版本作为基础来讲解&#xff0…

【数据挖掘】实验8:分类与预测建模

实验8&#xff1a;分类与预测建模 一&#xff1a;实验目的与要求 1&#xff1a;学习和掌握回归分析、决策树、人工神经网络、KNN算法、朴素贝叶斯分类等机器学习算法在R语言中的应用。 2&#xff1a;了解其他分类与预测算法函数。 3&#xff1a;学习和掌握分类与预测算法的评…

UTS iOS插件

1、UTS插件无法出现 再uniapp x中使用时&#xff0c;必须给这个插件高度和宽度&#xff0c;否则出不来&#xff01; <uts-hello-view buttonText"点击按钮内容" style"width:375px;height: 375px;background-color: aqua;"></uts-hello-view>…

关于外网java后端服务访问内网minio中间件,因连接minio超时,启动失败问题

注&#xff1a;服务器情况&#xff1a;2台服务器&#xff0c;内网服务器包含&#xff08;activemq、minio、nginx、redis、mysql、后端java服务&#xff09;。外网服务器只有后端java服务&#xff0c;访问内网的中间件&#xff08;内网服务器开放了部分指定端口&#xff09; 问…

技术速递|.NET 智能组件简介 – AI 驱动的 UI 控件

作者&#xff1a;Daniel Roth 排版&#xff1a;Alan Wang AI 的最新进展有望彻底改变我们与软件交互和使用软件的方式。然而&#xff0c;将 AI 功能集成到现有软件中可能面临一些挑战。因此&#xff0c;我们开发了新的 .NET 智能组件&#xff0c;这是一组真正有用的 AI 支持的 …

无法连接到本地主机上的MySQL服务器???

如果你在连接工具上连接mysql连接&#xff0c;如下 可能是本地数据库没有启动 使用管理员身份打开cmd窗口&#xff0c;输入net start mysql命令&#xff0c;关闭数据库输入命令net stop mysql 然后在打开连接工具连接mysql就可以了

Java之JVM、JUC面试题笔记(持续更新)

CountDownLatch和CyclicBarrier JUC 并发编程_juc并发编程-CSDN博客 java 类加载机制&#xff1f;如何实现自定义类加载器&#xff1f;findClass 与 loadClass 的区别&#xff1f; 在Java中&#xff0c;自定义类加载器通常是通过继承java.lang.ClassLoader类并重写其findClas…

《机器学习by周志华》学习笔记-线性模型-02

1、对数几率回归 1.1、背景 上一节我们考虑了线性模型的回归学习,但是想要做分类任务就需要用到上文中的广义线性模型。 当联系函数连续且充分光滑,考虑单调可微函数,令: 1.2、概念 找一个单调可谓函数,将分类任务的真实标记与线性回归模型的预测值联系起来,也叫做「…

机器学习实验二-----决策树构建

决策树是机器学习中一种基本的分类和回归算法&#xff0c;是依托于策略抉择而建立起来的树。本文学习的是决策树的分类 1. 构建决策树流程 选择算法&#xff1a;常用的算法包括ID3、C4.5、CART等。 划分节点&#xff1a;根据数据特征和算法选择&#xff0c;递归地划分节点&…

鉴源实验室丨智能网联汽车协议模糊测试技术概述

作者 | 乔琪 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 摘要&#xff1a;随着智能网联汽车的快速发展&#xff0c;其协议安全性和稳定性成为了关注焦点。智能网联汽车协议特点主要表现为…

javaweb http

1、http简介 HTTP 超文本传输协议&#xff08;HTTP-Hyper Text transfer protocol&#xff09;&#xff0c;是一个属于应用层的面向对象的协议&#xff0c;由于其简捷、快速的方式&#xff0c;适用于分布式超媒体信息系统。它于1990年提出&#xff0c;经过十几年的使用与发展&…

【绘图软件】solidworks2022版本安装强制卸载(清理干净版!)全流程~超详细+报错避坑

安装包可以去【盒子部落】下载&#xff0c;也可以用下面网盘直接下载&#xff1a; 夸克网盘链接&#xff1a;https://pan.quark.cn/s/f2c110617bfa&#xff08;无密码&#xff09; 1.解压后进入文件夹 2.进入_SolidSQUAD_文件夹 3.复制SolidWorks_Flexnet_Server文件夹 4.打开C…

MySQL 的事务

事务概念 MySQL事务是一个或者多个的数据库操作&#xff0c;要么全部执行成功&#xff0c;要么全部失败回滚。 事务是通过事务日志来实现的&#xff0c;事务日志包括&#xff1a;redo log和undo log。 事务状态 事务有以下五种状态&#xff1a; 活动的部分提交的失败的中止的…