网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践
文章目录
- 客户端缓存与服务器缓存的区别
- 客户端缓存
- 浏览器缓存
- 应用程序缓存
- 优点
- 缺点
- 服务器缓存
- 优点
- 缺点
- HTTP缓存控制头字段
- Cache-Control
- Expires
- Last-Modified
- ETag
- 缓存策略的优化与实践经验分享
- 1. 使用合适的缓存头字段
- 2. 结合使用Last-Modified和ETag
- 3. 利用CDN进行缓存
- 4. 实现缓存失效机制
- 5. 缓存预热
- 6. 监控与调优
- 7. 避免缓存雪崩
客户端缓存与服务器缓存的区别
客户端缓存
客户端缓存是指将数据存储在用户的设备上,以减少网络请求的频率和提高应用性能。常见的客户端缓存包括浏览器缓存和应用程序缓存。
浏览器缓存
浏览器缓存是指浏览器将网站的数据(如HTML、CSS、JavaScript、图片等)存储在本地磁盘或内存中,以便在用户再次访问时能快速加载这些资源,而不需要重新从服务器获取。
应用程序缓存
应用程序缓存是指将数据存储在客户端应用程序的本地存储中,以减少网络请求的频率和提高应用性能。常见的应用程序缓存技术包括本地存储(如HTML5的LocalStorage和SessionStorage)、IndexDB,以及移动应用中的本地数据库(如SQLite)。
优点
- 减少服务器负载:减少了对服务器的请求次数,从而减轻了服务器的压力。
- 提高加载速度:从本地缓存加载资源要比从服务器获取快得多,从而提升用户体验。
缺点
- 数据可能过时:客户端缓存的数据可能与服务器上的最新数据不一致,导致用户看到的内容不是最新的。
- 存储空间有限:客户端设备的存储空间是有限的,尤其是在移动设备上。
- 安全性风险:本地存储的数据可能面临安全风险,如果没有适当的加密和保护措施,敏感数据可能会被恶意软件或用户窃取。
通过合理利用客户端缓存,可以显著提升应用的性能和用户体验,但同时需要注意数据一致性和安全性问题。结合具体应用场景,选择合适的缓存技术和策略,才能实现最佳效果。
服务器缓存
服务器缓存是指将数据存储在服务器端的缓存系统中,以减少对数据库或其他后端服务的访问频率,从而提高系统性能。常见的服务器缓存包括内存缓存(如Redis、Memcached)和文件缓存。
优点
- 减少数据库负载:通过缓存数据库查询结果,减少了对数据库的访问频率,从而减轻数据库的压力。
- 提高响应速度:从缓存中读取数据要比从数据库中读取快得多,从而提高了服务器的响应速度。
缺点
- 缓存一致性问题:缓存中的数据可能与数据库中的数据不一致,需要采取适当的缓存失效机制来确保数据一致性。
- 额外的维护成本:需要设计和维护缓存系统,增加了系统的复杂度。
HTTP缓存控制头字段
HTTP协议提供了一些头字段来控制缓存行为,常见的包括Cache-Control、Expires、Last-Modified和ETag。
Cache-Control
Cache-Control头字段用于指定请求和响应的缓存机制。它可以包含多个指令,常见的指令包括:
- public:表示响应可以被任何缓存(包括浏览器、CDN等)存储。
- private:表示响应只能被单个用户的浏览器缓存存储,不能被共享缓存存储。
- no-cache:强制缓存进行重新验证,即使缓存副本是新鲜的。
- no-store:禁止任何缓存存储响应数据,每次请求都必须从服务器获取。
- max-age=:指定响应可以被缓存的最大时间,以秒为单位。
例如:
Cache-Control: public, max-age=3600
表示响应可以被任何缓存存储,并且缓存的有效期为3600秒(1小时)。
Expires
Expires头字段指定响应过期的日期和时间,格式为HTTP日期。它用于指示缓存何时认为响应是陈旧的。
例如:
Expires: Wed, 21 Oct 2024 07:28:00 GMT
表示响应在2024年10月21日7点28分后过期。
需要注意的是,如果同时存在Cache-Control和Expires头字段,Cache-Control优先级更高。
Last-Modified
Last-Modified头字段指示资源的最后修改时间。服务器可以在响应中包含这个头字段,客户端在后续请求中可以使用If-Modified-Since头字段来询问服务器资源是否在某个时间点之后修改过。
例如:
Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
客户端请求时可以包含:
If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT
如果资源自该时间点之后未修改,服务器可以返回304 Not Modified响应,指示客户端使用缓存数据。
ETag
ETag(实体标签)是资源的标识符,通常是资源内容的哈希值。服务器在响应中包含这个头字段,客户端在后续请求中可以使用If-None-Match头字段来询问服务器资源是否发生变化。
例如:
ETag: "686897696a7c876b7e"
客户端请求时可以包含:
If-None-Match: "686897696a7c876b7e"
如果资源未变化,服务器返回304 Not Modified响应。
缓存策略的优化与实践经验分享
1. 使用合适的缓存头字段
在实际项目中,根据资源的不同特点选择合适的缓存头字段。例如,对于不经常变化的静态资源(如图片、CSS、JavaScript文件),可以设置较长的max-age和public指令。而对于动态内容,可能需要设置no-cache或较短的max-age。
2. 结合使用Last-Modified和ETag
Last-Modified和ETag可以结合使用,以确保缓存的有效性。通过这两个头字段,服务器可以准确判断资源是否发生了变化,从而避免不必要的数据传输。
3. 利用CDN进行缓存
使用内容分发网络(CDN)可以显著提高资源加载速度和减少服务器负载。CDN会将资源缓存到离用户最近的节点,减少了网络延迟。配置CDN时,可以结合使用Cache-Control头字段,以控制CDN的缓存行为。
4. 实现缓存失效机制
为了确保缓存数据的准确性,需要设计合理的缓存失效机制。例如,可以在资源更新时主动使相关缓存失效,或者设置合理的缓存过期时间。对于服务器缓存,可以使用如Redis的expire命令设置缓存的过期时间。
5. 缓存预热
在系统启动或发布新版本时,可以预先加载一些常用数据到缓存中,这样在用户首次访问时就能直接从缓存中获取数据,提高响应速度。
6. 监控与调优
定期监控缓存的命中率和性能,分析缓存策略的效果,并根据实际情况进行调整。可以通过日志和监控工具,了解缓存的使用情况和命中率,以便及时发现问题和优化缓存策略。
7. 避免缓存雪崩
缓存雪崩是指大量缓存同时失效,导致大量请求直接打到数据库或后端服务,造成系统压力剧增。可以通过设置不同的缓存过期时间,避免大量缓存同时失效。
通过合理的缓存策略,可以显著提升系统性能,降低服务器负载,并改善用户体验。在实践中,需要结合具体项目的特点,灵活运用各种缓存技术和策略,才能实现最佳效果。
相关文章:
网络学习(11) |深入解析客户端缓存与服务器缓存:HTTP缓存控制头字段及优化实践
文章目录 客户端缓存与服务器缓存的区别客户端缓存浏览器缓存应用程序缓存优点缺点 服务器缓存优点缺点 HTTP缓存控制头字段Cache-ControlExpiresLast-ModifiedETag 缓存策略的优化与实践经验分享1. 使用合适的缓存头字段2. 结合使用Last-Modified和ETag3. 利用CDN进行缓存4. 实…...
uniapp中二次封装jssdk和使用
直接上代码 // import wx from "weixin-js-sdk"; /*** 考虑到包的大小,所以直接在 index.html 文件中cdn引入了jssdk* <script src"https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>* 注意:这里 jWeixin 一…...
只刷题可以通过PMP考试吗?
咱们都知道,PMBOK那本书,哎呀,读起来确实有点费劲。所以,有些人就想了,干脆我就刷题吧,题海战术,没准儿也能过。这话啊,听起来似乎有点道理,但咱们得好好琢磨琢磨。 刷题…...
Python Selenium 详解:实现高效的UI自动化测试
落日余辉,深情不及久伴。大家好,在当今软件开发的世界中,自动化测试已经成为保障软件质量和快速迭代的重要环节。而在自动化测试的领域中,UI自动化测试是不可或缺的一部分,它可以帮助测试团队快速验证用户界面的正确性…...
npm获取yarn在安装依赖时 git://github.com/user/xx.git 无法访问解决方法 -- 使用 insteadOf设置git命令别名
今天在使用一个node项目时突然遇到 一个github的拉取异常,一看协议居然是git://xxx 貌似github早就不用这种格式了, 而是使用的gitgithub.com:xxx 这种或者https协议,解决方法: 使用insteadof设置git别名 url.<base>.inste…...
Centos7网络故障,开机之后连不上网ens33mtu 1500 qdisc noop state DOWN group default qlen 1000
说明 这是Linux系统网络接口的信息,其中"mtu 1500"表示最大传输单元大小为1500字节,“qdisc noop”表示没有设置特殊的队列算法,“state down”表示该接口当前处于关闭状态,“group default”表示该接口属于“default”…...
分析 Base64 编码和 URL 安全 Base64 编码
前言 在处理数据传输和存储时,Base64 编码是一种非常常见的技术。它可以将二进制数据转换为文本格式,便于在文本环境中传输和处理。Go 语言提供了对标准 Base64 编码和 URL 安全 Base64 编码的支持。本文将通过一个示例代码,来分析这两种编码…...
cocos 屏幕点击坐标转换为节点坐标
let scPos event.getLocation(); let camera find(Canvas/Camera).getComponent(Camera).screenToWorld(new Vec3(scPos.x,scPos.y,0));//摄像机 let p this.node.getComponent(UITransform).convertToNodeSpaceAR(camera);//this.node为指定的节点为原点(0,0&…...
电瓶车进电梯识别报警摄像机
随着电动车的普及,越来越多的人选择电动车作为出行工具。在诸多场景中,电梯作为一种常见的交通工具,也受到了电动车用户的青睐。然而,电动车进入电梯时存在一些安全隐患,为了提高电动车进电梯的安全性,可以…...
数据库到服务器提权
数据库提权流程: 1、先获取到数据库用户密码 -网站存在SQL注入漏洞 -数据库的存储文件或备份文件 -网站应用源码中的数据库配置文件 -采用工具或脚本爆破(需解决外联问题) 2、利用数据库提权项目进行连接 MDUT //jkd1.8 启动 Databasetools …...
【MySQL精通之路】InnoDB(9)-表和页压缩(1)-表压缩
目录 1.表压缩概述 2.创建压缩表 2.1 在FPT表空间中创建压缩表 2.2 在通用表空间中创建压缩表 2.3 压缩表的限制 3.优化InnoDB表的压缩 4.运行时监控InnoDB表压缩 5.InnoDB表的压缩工作原理 5.1 压缩算法 5.2 InnoDB数据存储和压缩 5.3 B树页面的压缩 5.4 压缩BLOB、…...
【前端】vue+element项目中select下拉框label想要显示多个值多个字段
Vue Element项目中select下拉框label想要显示多个值 <el-selectv-model"form.plantId"collapse-tagsfilterableplaceholder"请选择品种种类"style"width: 270px;"><el-optionv-for"item in plantIdArray":key"item.id&…...
橙派探险记:开箱香橙派 AIpro 与疲劳驾驶检测的奇幻之旅
目录 引子:神秘包裹的到来 第一章:香橙派AIpro初体验 资源与性能介绍 系统烧录 Linux 镜像(TF 卡) 调试模式 登录模式 第二章:大胆的项目构想 系统架构设计 香橙派 AIpro 在项目中的重要作用 第三章…...
云计算期末复习(1)
云计算基础 作业(问答题) (1)总结云计算的特点。 透明的云端计算服务 “无限”多的计算资源,提供强大的计算能力 按需分配,弹性伸缩,取用方便,成本低廉资源共享,降低企…...
frp转发服务
将内网服务转发到外网,我准备了一台阿里云ubuntu22.04服务器,两台内网ubuntu22.04服务器 下载frpc和frps以及配置文件 链接: https://pan.baidu.com/s/1auvcWWnyfpYPYatYhHFYag?pwdqkgh 提取码: qkgh 复制这段内容后打开百度网盘手机App,操作…...
【主流分布式算法总结】
文章目录 分布式常见的问题常见的分布式算法Raft算法概念Raft的实现 ZAB算法Paxos算法 分布式常见的问题 分布式场景下困扰我们的3个核心问题(CAP):一致性、可用性、分区容错性。 1、一致性(Consistency):…...
spring cloud config server源码学习(一)
文章目录 1. 注解EnableConfigServer2. ConfigServerAutoConfiguration2.1 ConditionalOnBean和ConditionalOnProperty2.2 Import注解2.2.1. EnvironmentRepositoryConfiguration.class2.2.2. CompositeConfiguration.class2.2.3. ResourceRepositoryConfiguration.class2.2.4.…...
人脸识别——探索戴口罩对人脸识别算法的影响
1. 概述 人脸识别是一种机器学习技术,广泛应用于各种领域,包括出入境管制、电子设备安全登录、社区监控、学校考勤管理、工作场所考勤管理和刑事调查。然而,当 COVID-19 引发全球大流行时,戴口罩就成了日常生活中的必需品。广泛使…...
磁盘管理后续——盘符漂移问题解决
之前格式化磁盘安装了文件系统,且对磁盘做了相应的挂载,但是服务器重启后挂载信息可能有问题,或者出现盘符漂移、盘符变化、盘符错乱等故障,具体是dev/sda, sdb, sdc 等等在某些情况下会混乱掉 比如sda变成了sdb或者sdc变成了sdb等…...
基于GO 写的一款 GUI 工具,M3u8视频下载播放器-飞鸟视频助手
M3u8视频下载播放器-飞鸟视频助手 M3u8视频飞鸟视频助手使用m3u8下载m3u8 本地播放 软件下载地址m3u8嗅探 M3u8视频 M3u8视频格式是为网络视频播放设计,视频网站多数采用 m3u8格式。如腾讯,爱奇艺等网站。 m3u8和 mp4的区别: 一个 mp4是一个…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
用鸿蒙HarmonyOS5实现国际象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...
python打卡day49@浙大疏锦行
知识点回顾: 通道注意力模块复习空间注意力模块CBAM的定义 作业:尝试对今天的模型检查参数数目,并用tensorboard查看训练过程 一、通道注意力模块复习 & CBAM实现 import torch import torch.nn as nnclass CBAM(nn.Module):def __init__…...
