浏览器如何进行静态资源缓存?—— 强缓存 协商缓存

news2025/1/31 2:50:41

在平时使用浏览器排查问题的过程中,我们有时会看到浏览器网络请求中出现304状态码,那么是什么情况下出现304呢?下面是关于这一现象的解释:

浏览器如何进行静态资源缓存?—— 强缓存 & 协商缓存

  • 状态码 304
  • 浏览器如何进行静态资源缓存 ?
    • 一、 强缓存(Cache-Control、Expires)
      • 1. Cache-Control:
      • 2. Expires:
    • 二、协商缓存(ETag、Last-Modified)
      • 1. Last-Modified 和 If-Modified-Since:
      • 2. ETag 和 If-None-Match:
    • 两种缓存策略的优缺点比较:

状态码 304

状态码 304 表示 "Not Modified",它是 HTTP 协议中的一个状态码,用于指示客户端的缓存副本仍然有效,并且可以继续使用缓存的资源,而不需要服务器返回实际的内容。

当客户端发送一个带有缓存验证信息的请求(例如 If-None-MatchIf-Modified-Since),服务器会检查这些验证信息与当前资源的状态是否匹配。如果验证信息与服务器上的资源匹配,表示资源没有发生变化,则服务器会返回 304 状态码,告诉客户端可以继续使用缓存的资源。

304 响应通常伴随着以下特征:

  • 响应头中没有实际的响应体,因为服务器不需要返回实际内容。
  • 响应头中通常会包含 ETagLast-Modified 字段,用于告诉客户端如何验证缓存。
  • 响应头中可能包含新的 Cache-Control 指令,用于更新缓存策略。

当客户端接收到 304 响应时,它会使用缓存的资源,从本地缓存中加载所需的文件,而无需再次下载整个资源。这样可以减少网络请求和服务器负载,提高页面加载速度和性能。

总结来说,304 状态码表示资源未修改,缓存仍有效,客户端可以继续使用缓存的资源,避免了无效的数据传输和资源浪费。

浏览器如何进行静态资源缓存 ?

强缓存(Cache-Control、Expires)和协商缓存(ETag、Last-Modified)是 HTTP 缓存机制中常见的两种方式。
在这里插入图片描述

一、 强缓存(Cache-Control、Expires)

强缓存通过在响应头中设置 Cache-Control 和 Expires 字段来控制缓存的行为。

1. Cache-Control:

Cache-Control 是 HTTP 头部中的一个字段,用于指定资源的缓存策略。通过设置 Cache-Control 的值,可以告诉浏览器如何缓存和重新验证资源。

可以设置多个指令,常见的指令有:

  • max-age:指定缓存的有效时间(以秒为单位)。
  • no-cache:表示客户端必须向服务器发送请求进行验证,不能直接使用缓存的资源。
  • no-store:表示不缓存任何响应内容。

2. Expires:

Expires 是 HTTP 头部中的一个字段,表示资源的到期时间。通过设置 Expires 的值为一个绝对过期时间,浏览器可以知道在该时间之前可以直接使用缓存的资源。然而,Expires 是一个相对较旧的缓存控制方式,现在通常使用 Cache-Control 代替。

在http1.0是Expires,在http1.1是Cache-Control,俩字段同时存在的话1.1优先级肯定大于1.0;

当客户端发起请求时,如果缓存的资源没有过期(根据 Cache-Control 或 Expires 判断),浏览器会直接从缓存中获取资源,而不发送请求到服务器。

二、协商缓存(ETag、Last-Modified)

协商缓存通过在请求头中发送 If-Modified-SinceIf-None-Match 字段,以及在响应头中设置 Last-ModifiedETag 字段来控制缓存的行为。

1. Last-Modified 和 If-Modified-Since:

服务器在响应头中返回 Last-Modified 字段,表示资源的最后修改时间。当客户端再次请求该资源时,在请求头中添加 If-Modified-Since 字段,值为上次响应中Last-Modified
如果资源在该时间后没有修改过,服务器会返回 304 Not Modified,客户端继续使用缓存的资源。

2. ETag 和 If-None-Match:

服务器在响应头中返回 ETag 字段,它是一个唯一标识符,代表资源的特定版本。当客户端再次请求该资源时,在请求头中添加 If-None-Match字段,值为上次响应中ETag 值。
如果资源的 ETag 值与客户端发送的 If-None-Match 值匹配 ,服务器会返回 304 Not Modified,客户端继续使用缓存的资源。

在http1.0是Last-Modified,在http1.1是Etag,俩字段同时存在的话1.1优先级肯定大于1.0;

协商缓存相对于强缓存提供了更细粒度的控制,可以根据资源的变化情况来判断是否使用缓存

通常情况下,浏览器会先检查强缓存,如果强缓存生效,则直接使用缓存的资源;如果强缓存失效,则发送请求到服务器进行协商缓存验证,根据服务器返回的响应来决定是否使用缓存的资源。

两种缓存策略的优缺点比较:

  • 强制缓存的缺点:就是可能在强制的这段时间里服务器文件更新了,那浏览器就读不到最新的资源了;
  • 协商缓存的缺点:就是每次都要发个请求去问服务器资源是否更新,可能造成不必要的时间和流量浪费;

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

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

相关文章

Discuz! X3.5精品模板下载网站模板utf-8

适合做模板下载网站,模板涵盖广告设计/电商设计/海报/名片/字体/展板/X展架,下载即用,精品优质,海量免费模板网下载下载,专业模板素材网站,让设计变得更简单! 下载地址:Discuz! X3.5精品模板下载网站模板.zip 截图:

【C语言】字符与字符串---从入门到入土级详解

🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.字符类型和字符数组(串)简介 1.ASCII 2.定义,初始化,使用 1>字符的定义及初始化 2>字符串的定义及初始化 二.…

Qt教程 — 3.3 深入了解Qt 控件:Input Widgets部件(2)

目录 1 Input Widgets简介 2 如何使用Input Widgets部件 2.1 QSpinBox组件-窗口背景不透明调节器 2.2 DoubleSpinBox 组件-来调节程序窗口的整体大小 2.3 QTimeEdit、QDateEdit、QDateTimeEdit组件-编辑日期和时间的小部件 Input Widgets部件部件较多,将分为三…

JavaWeb笔记 --- 四、HTMlCSS

四、HTMl&CSS HTML入门 基本标签 图片、音频、视频标签 尺寸单位 px:像素 百分比 超链接标签 列表标签 表格标签 布局标签 表单标签 CSS导入方式 CSS选择器

Lua中文语言编程源码-第一节,更改llex.c词法分析器模块, 使Lua支持中文关键词。

源码已经更新在CSDN的码库里: git clone https://gitcode.com/funsion/CLua.git 在src文件夹下的llex.c,是Lua的词法分析器模块。 增加中文保留字标识符列表,保留英文保留字标识符列表。 搜索“ORDER RESERVED”,将原始代码 …

科研绘图一:箱线图(添加贝赛尔曲线)

R语言绘图系列—箱线图贝赛尔曲线 (一): 科研绘图一:箱线图(添加贝赛尔曲线) 文章目录 R语言绘图系列---箱线图贝赛尔曲线(一): 科研绘图一:箱线图(添加贝赛尔曲线&…

matlab采用PSO优化算法进行机器人线路规划

1、内容简介 略 63-可以交流、咨询、答疑 matlab采用PSO优化算法进行机器人线路规划 2、内容说明 避障,PSO算法,固定点优化,支持障碍物、优化点设置 matlab采用PSO优化算法进行机器人线路规划 3、仿真分析 4、参考论文 略

Linux第80步_使用“信号量”实现“互斥访问”共享资源

1、创建MySemaphoreLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MySemaphoreLED回车”,创建“MySemaphoreLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件…

获取扇区航班数

1、Spark Streaming清洗服务,接收kafka中Topic为“task_ATC”中的数据,保存在MySQL中。 打开SpringBoot项目BigData-Etl-KongGuan 请认真阅读:在前面的“使用Spark清洗统计业务数据并保存到数据库中”任务阶段中应该已经完成了所有Topic的数…

HarmonyOS NEXT应用开发—状态栏显隐变化

介绍 本示例介绍使用Scroll组件的滚动事件 onScroll 实现状态栏显隐变化。该场景多用于各种软件的首页、我的等页面中。 效果预览图 使用说明 加载完成后显示状态栏显隐变化页面,上下拖动屏幕,顶端状态栏出现显隐变化。 实现思路 在置顶位置使用sta…

智慧城市与数字孪生:共创未来城市的智慧生活

目录 一、智慧城市与数字孪生的概念与特点 二、智慧城市与数字孪生共创智慧生活的路径 1、城市规划与建设的智能化 2、城市管理与服务的智慧化 3、城市安全与应急管理的智能化 三、智慧城市与数字孪生面临的挑战与对策 四、智慧城市与数字孪生的发展趋势与展望 1、技术…

基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于最小二乘法的太阳黑子活动模型参数辨识和预测matlab仿真。太阳黑子是人们最早发现也是人们最熟悉的一种太阳表面活动。因为太阳内部磁场发生变化,…

MySQL中的索引失效情况介绍

MySQL中的索引是提高查询性能的重要工具。然而,在某些情况下,索引可能无法发挥作用,甚至导致查询性能下降。在本教程中,我们将探讨MySQL中常见的索引失效情况,以及它们的特点和简单的例子。 1. **索引失效的情况** …

Tomcat Session 集群 ---------会话保持

一、 负载均衡、反向代理 环境搭建: nginx服务器192.168.246.7 tomcat 1服务器192.168.246.8 tomcat 2服务器192.168.246.9 7-1 nginx服务器搭建 [rootzzcentos1 ~]#systemctl stop firewalld [rootzzcentos1 ~]#setenforce 0 [rootzzcentos1 ~]#yum install …

网络管理基础

Linux网络管理 1.网络管理概念 网络接口和名称 :网卡 ip地址 网关 主机名称 路由2.管理工具 net-tools: #安装包 ifconfig netstat 准备要废掉了。iproute: #安装包 ip #提供ip命令3.认识网卡 lo网卡 :本地回环网卡,本机上的服务自己访问自…

宝塔 安装对外服务Tomcat和JDK

一、安装Tomcat\JDK 切记1:如果选择下载节点失败,请到软件商城安装 。 切记2:提醒安装Nginx或Apache ,先点安装,进入再打叉关闭。因为Tomcat服务足够为我们搭建JavaWeb网站服务了。 切记3:Nginx占用80端口…

vanna:基于RAG的text2sql框架

文章目录 vanna简介及使用vanna的原理vanna的源码理解总结参考资料 vanna简介及使用 vanna是一个开源的利用了RAG的SQL生成python框架,在2024年3月已经有了5.8k的star数。 Vanna is an MIT-licensed open-source Python RAG (Retrieval-Augmented Generation) fram…

Java后端八股-------并发编程

图中的 synchronized方法如果没有锁,那么可能会有超卖,数据错误等情况。 加锁之后会按顺序售卖。 synchronized的底层是monitor。 线程没有竞争关系的时候,引入了轻量级锁,当需要处理竞争关系的时候一定要用到重量级锁(线程的…

路由器端口转发远程桌面控制:一电脑连接不同局域网的另一电脑

一、引言 路由器端口转发:指在路由器上设置一定的规则,将外部的数据包转发到内部指定的设备或应用程序。这通常需要对路由器进行一些配置,以允许外部网络访问内部网络中的特定服务和设备。端口转发功能可以实现多种应用场景,例如远…

【类脑智能】脑网络通信模型分类及量化指标(附思维导图)

脑网络通信模型分类及量化指标(附思维导图) 参考论文:Brain network communication_ concepts, models and applications 概念 脑网络通信模型是一种使用图论和网络科学概念来描述和量化大脑结构中信息传递的模型。这种模型可以帮助研究人员理解神经信号在大脑内…