HTTP之强缓存和协商缓存

『网络篇』之手把手实现强缓存与协商缓存 本文为网络篇系列中的第一篇文章,主要介绍的是浏览器根据服务器返回数据的响应头做出的一系列处理,以及强缓存和协商缓存是如何进行判断是否使用缓存数据,最后将手把手实现nodejs实现强缓存以及协商缓存案例 阅读详情

在这里插入图片描述

关于强缓存和协商缓存的理论知识和express.js下的实践,政采云前端团队的这篇文章已经非常详尽了:图解 HTTP 缓存

强缓存和协商缓存流程图

图来自图解 HTTP 缓存

刚好我最近也在对这一块的内容做补充和总结,受到这篇优质博文的启发,于是有了这篇博文。

那么在这篇博文中会看到什么呢?

  • 强缓存和协商缓存需要注意的细节
  • HTTP 强缓存和协商缓存之 Koa 实战
    • Expires,Cache-Control,Pragma
    • If-Modified-Since&&Last-Modified
    • If-None-Match&&ETag

强缓存和协商缓存需要注意的细节

报文头类型

报文头请求头响应头
Expires否是
Pragma是是
Cache-Control是是
If-Match/If-None-Match是否
ETag否是
If-Modified-Since是否
Last-Modified否是

报文头优先级

强缓存:Pragma > Cache-Control > Expires

协商缓存:If-None-Match/ETag > If-Modified-Since/Last Modified

如果强缓存是新鲜的,优先强缓存。

如果强缓存是不新鲜的,判断有无协商缓存:

若上一次请求中有ETag,在If-None-Match带上ETag value;

若上一次请求中没有ETag,判断上一次请求响应中是否有Last-Modified,在If-Modified-Since中带上Last-Modified value;

若资源没有更新,状态码为304走浏览器缓存;若为200,走协商缓存,返回更新后的资源。

HTTP 强缓存和协商缓存之 Koa 实战

Expires

代码:

const Koa = require("koa");
const app = new Koa();

app.use((ctx) => {
  ctx.body = "HTTP强缓存之Expires";
  ctx.set("Expires", "Mon, May 11 2020 22:10:14 GMT");
});

app.listen(3000);
console.log("应用运行在localhost:3000");

首次请求:

第二次请求来自强缓存:

Cache-Control

代码:

const Koa = require("koa");
const app = new Koa();

app.use((ctx) => {
  ctx.body = "HTTP强缓存之Cache-Control";
  ctx.set("Cache-Control", "public,max-age=60");
});

app.listen(3000);
console.log("应用运行在localhost:3000");

首次请求:

第二次请求来自强缓存:

Pragma

代码:

const Koa = require("koa");
const app = new Koa();

app.use((ctx) => {
  ctx.body = "HTTP强缓存之Pragma";
  ctx.set("Pragma", "no-cache");
});

app.listen(3000);
console.log("应用运行在localhost:3000");

首次请求:
Pragma
image
第二次请求:

If-Modified-Since&&Last-Modified

代码:

const Koa = require("koa");
const app = new Koa();

app.use((ctx) => {
  ctx.body = "HTTP协商缓存之If-Modified-Since&&Last-Modified";
  ctx.set({
    "Last-Modified": "Mon, May 11 2020 22:20:14 GMT",
  });
});

app.listen(3000);
console.log("应用运行在localhost:3000");

第一次请求:

第二次请求:

If-None-Match&&ETag

代码:

const conditional = require("koa-conditional-get");
const etag = require("koa-etag");
const Koa = require("koa");
const app = new Koa();

app.use(conditional());
app.use(etag());

app.use((ctx) => {
  ctx.body = "HTTP协商缓存之If-None-Match&&ETag";
});

app.listen(3000);
console.log("应用运行在localhost:3000");

首次请求:

第二次请求来自协商缓存:

期待和大家交流,共同进步,欢迎大家加入我创建的与前端开发密切相关的技术讨论小组:

努力成为优秀前端工程师!

【高频考点精讲】HTTP缓存机制详解,强缓存和协商缓存该如何选择? 🧑‍🏫:全栈老李📅:2025 年 5 月🧑‍💻:前端初学者、进阶开发者🚀:本文由全栈老李原创,转载请注明出处。大家好,我是全栈老李。今天咱们来聊聊前端性能优化中绕不开的话题——HTTP缓存机制。这玩意儿就像是你家楼下的便利店,如果老板能记住你常买的东西(缓存命中),那交易速度肯定比现去超市快得多(全栈老李友情提示:这个比喻虽然土但好使)。 阅读详情

相关推荐

SV--对象拷贝、参数化的类

对象拷贝,参数化的类

创芯人--fly的博客 1570

强制缓存和协商缓存

当浏览器请求一个资源时,该资源可以缓存到客户端(浏览器)中,以便以后重复使用。浏览器缓存是一种可以显著提高Web应用程序性能的技术,但它可能会导致某些问题,例如在更新资源时无法及时获取最新版本。在这种情况下,我们可以使用浏览器缓存策略来强制或协商缓存资源。

zhoukaibai的博客 931

MIPS-5级流水线CPU

一、流水线CPU 流水线CPU就是指将一条分解为多步,在同一周期内进行多条指令的同时执行。MIPS五级流水线就是将指令分为:取指(IF),译码(ID),执行(EX),访存(MEM),写回(WB)五个阶段。举个例子: 比如第二条指令lui $t2,0x2100 在流水线CPU中执行的就是 可以看到在200-300ns的周期里,IF阶段取到0x00400004处的指令,300-400ns,这条指令到了ID阶段,而IF阶段执行下一条指令。400-500ns,执行这条指令,ALU的结果为0x2100

weixin_43877853的博客 2万+

三、HTTP缓存动如何使用(Expires、 cache-control、Etag、last-modified)----哪些文件需要强缓存,哪些文件需要协商缓存

三、HTTP缓存动如何使用(Expires、 cache-control、Etag、last-modified)----哪些文件需要强缓存,哪些文件需要协商缓存

qq_43631129的博客 526

欧姆龙PLC与fanuc发那科机器人进行Ethrenet ip通信测试

近期在做发那科FANUC的通讯,会吧CC-LINK、Profibus-DP、Profinet I/O、DeviceNet、EtherNet/IP这些常用通讯做成文档发上来,大家喜欢的话可以关注 注:做对应的通讯,在机器人控制柜都需要安装对应的板卡以及软件功能 截图中的程序设置和机器人EDS插件在下面链接 https://download.youkuaiyun.com/download/gojava/13770799 PLC为主站 机器人为从站 一、硬件部分 欧姆龙PLC ...

七兔自习室 1万+

极智嘉嵌入式面试题及参考答案

IIC(Inter-Integrated Circuit)即集成电路总线,是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它仅使用两根线,即串行数据线 SDA 和串行时钟线 SCL,就能实现多个设备之间的通信,具有简单、高效、占用资源少等优点,广泛应用于各种嵌入式系统中。

大模型大数据攻城狮的专栏 921

浏览器缓存的力量

点击上方前端瓶子君,关注公众号回复算法,加入前端编程面试算法每日一题群来源:黑色的枫https://juejin.cn/post/6947936223126093861在前端性能优化的方...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 333

仿真学习系列(二):ADS仿真直观理解方波与频谱分量的关系

在高速电路设计中,我们常常听到一句话:“信号其实不是电压在传输,而是频率在传播。” 这句话看似抽象,却揭示了信号世界的核心本质——任何时域波形,都可以被拆解为一系列不同频率的正弦波。 那么,一个看似简单的方波,究竟由哪些频率成分组成?为什么在示波器上,有的方波上升沿又快又“方”,而有的却“圆润”得多?这些差异背后,隐藏的正是高频分量的力量。 本文将通过使用 Keysight ADS,从零搭建仿真电路,直观地观察方波与其谐波成分之间的关系。

案例文章,高速信号 813

【nodejs】http强缓存协商缓存以及设置

背景 以前啥都不懂时候听这个名字感觉好牛b的,实际上这玩意很简单,就是改个请求头完了。 概念 一、强缓存 强缓存是设置过期时间,超过设置的时间会发请求,否则就会走缓存,连请求也不会发。 状态码是200 二、协商缓存 协商缓存常用模式有两种,一种是last-modified,一种是etag。也有地方叫对比缓存的。 last-modified就是资源的修改时间。如果客户端来请求服务器一个文件...

不忘初心,坚定道路! 3164

GDB交叉编译与问题解决:从零到精通的深度指南

完成后,GDB会安装到/usr/local/gdb-aarch64/bin,可以用aarch64-linux-gnu-gdb --version检查。:得有支持目标架构的交叉编译工具链,比如gcc-arm-none-eabi(用于ARM裸机)或aarch64-linux-gnu-gcc(用于ARM Linux)。:在配置工具链时,运行aarch64-linux-gnu-gcc --version检查版本,确保工具链没问题。这种场景下用GDB调试,就像在荒野求生,但别慌,GDB依然是你的好伙伴。

大模型大数据攻城狮的专栏 1万+

微信小程序、H5微信公众号网页JSAPI:解决报错requestMerchantTransfer:fail:internal error(使用wx.requestMerchantTransfer错误)

如何解决requestMerchantTransfer:fail:internal error,微信小程序wx.requestMerchantTransfer报错,微信公众号H5网页使用jssdk调用wx.requestMerchantTransfer报错,JSAPI调起用户确认收款报错errMsg:“requestMerchantTransfer:fail:internal error“,微信小程序/H5 调起确认收款界面,JSAPI调起用户确认收款,微信公众号(H5),用户发起提现,商家转账给用户,用户

✅ 精选推荐文章 4966

HTTP系列之HTTP缓存 —— 强缓存和协商缓存

如果没有命中强缓存,浏览器会发送请求到服务器,该请求会携带第一次请求返回的有关缓存的header字段信息(Last-Modified / IF-Modified-Since、Etag / IF-None-Match),由服务器根据请求中的相关header信息来对比结果是否命中协商缓存,若命中,则服务器返回新的响应header信息更新缓存中的对应header信息,但是并不返回资源内容,它会告知浏览器可以直接从缓存获取;否则返回最新的资源内容。这个时间代表着这个资源的失效时间,在此时间之前,即命中缓存。

cherry__yu的博客 2601

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

前程算法屋的博客 1022

http的强缓存和协商缓存

expires是一个GTM格式的字符串,由服务器生成,表示资源过期的时间,当客户端再次请求该资源时,会把客户端时间与该时间戳进行对比,如果小于该时间戳(即资源尚未过期),则直接使用缓存资源,无需向服务器发送请求;服务器在响应请求时,通过last-modified字段返回该资源文件在服务器上最后被修改的时间,浏览器在再次发起该请求时,会在请求头中携带上次请求返回的last-modified的值,作为if-modified-since的值。如果时间不一致,说明资源有更新,服务器返回状态码。

qq_40977044的博客 960

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

HTTP 强缓存和协商缓存

对于客户端来说,HTTP缓存是web性能优化的重要手段。 优势: 减少了冗余的数据传递,节省宽带流量 减少了服务器的负担,大大提高了网站性能 加快了客户端加载网页的速度 这也正是HTTP缓存属于客户端缓存的原因。 用户体验好 缺点: 缓存中的数据可能与服务器的数据不一致 消耗内存 浏览器缓存一般是针对静态资源(js/css/img等),我们将缓存分为强缓存和协商缓存,两者的主要区别是...

风萧萧兮易水寒 2339

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HTTP 缓存机制详解:强缓存和协商缓存

HTTP 缓存是浏览器和服务器之间的一种机制,用于减少网络请求,提高页面加载速度,降低服务器压力。强缓存是指浏览器在缓存有效期内,直接从本地缓存读取资源,不会向服务器发送任何请求。协商缓存是指浏览器向服务器发送请求,服务器判断资源是否更新,如果未更新,返回 304 状态码,浏览器使用本地缓存。特性强缓存协商缓存网络请求❌ 无请求✅ 有请求(但响应体可能为空)响应速度⚡ 最快(0ms)🚀 快(需要网络往返)服务器压力✅ 无压力⚠️ 有压力(需要验证)数据新鲜度❌ 可能过期✅ 总是最新带宽消耗。

weixin_46504400的博客 1200

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Http强缓存和协商缓存

文章目录一、缓存介绍1、什么是缓存?2、为什么需要缓存?3、哪些资源可以被缓存?——静态资源(css、js、img)二、强制缓存1、定义:2、设置强缓存的方式 Expires & Cache-Control三、协商缓存1、定义2、设置协商缓存的方式 (Last-Modified , If-Modified-Since) & (ETag , If-None-Match)1) Last-Modified , If-Modified-Since2)Etag,If-None-Match对比: 一、缓

weixin_45740510的博客 3947

HTTP强缓存和协商缓存

浏览器缓存是浏览器在本地磁盘对用户最近请求过的文档进行存储,当访问者再次访问同一页面时,浏览器就可以直接从本地磁盘加载文档。浏览器缓存是Web性能优化的重要方式。那么浏览器缓存的过程究竟是怎么样的呢?

weixin_42169395的博客 351

http缓存策略以及强缓存和协商缓存浅析

🚀 优质资源分享 🚀 学习路线指引(点击解锁) 知识定位 人群定位 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 http缓存策略以及强缓存和协商缓存浅析 本地缓存-强缓存 本地缓存,也就是我们常说的强缓存:是指当浏览器请求资源时,如果请求服务端的资源命中了浏览器本地的缓存资源,那

虚幻私塾 1598

http状态码304缓存机制(强缓存和协商缓存-304)

http缓存机制

GreyCastle的博客 1万+

304 状态码是什么意思?图解 HTTP 强缓存和协商缓存

HTTP 的缓存机制,可以说这是前端工程师需要掌握的重要知识点之一。本文将针对 HTTP 缓存整体的流程做一个详细的讲解,争取做到大家读完整篇文章后,对缓存有一个整体的了解。HTTP 缓存分为 2 种,一种是强缓存,另一种是协商缓存。主要作用是可以加快资源获取速度,提升用户体验,减少网络传输,缓解服务端的压力。

圆圆的 JavaScript 博客 3688

HTTP 缓存策略:强缓存和协商缓存

大家好,我是前端西瓜哥。今天讲一下 HTTP 缓存策略的强缓存和协商缓存。缓存是什么?缓存(Cache)是一种数据存储技术,广泛应用在电脑工程领域。它将原本访问起来较慢的数据,放到访问更快的存储介质中,当第二次访问时,能够更快地访问数据,是一种 空间换时间 的做法。比如,有个文件经常被读取,且很少改变,那我们就直接将其缓存到内存中,节省掉耗时的 IO 磁盘读取时间。再比如,在写代码时,我们的一个方法会接受参数,然后计算返回一个结果,假设这个计算过程非常耗时,且结果值只依赖传入的参数。那我

fe_watermelon的博客 1225

最强Http缓存策略之强缓存和协商缓存的详解与应用实例

HTTP缓存是指浏览器或者代理服务器将已经请求过的资源保存到本地,以便下次请求时能够直接从缓存中获取资源,从而减少网络请求次数,提高网页的加载速度和用户体验。缓存分为强缓存和协商缓存两种模式。强缓存是指浏览器直接从本地缓存中获取资源,而不需要向web服务器发出网络请求。这是因为浏览器在第一次请求资源时,服务器会在响应头中添加相关缓存的响应头,以表明该资源的缓存策略。 常见的强缓存响应头如下所述:协商缓存是指在使用缓存之前,浏览器需要向服务器发起网络请求,以此根据服务器返回的响应头中的 ETag 或 Last

qq_28245087的博客 2958

http强缓存和协商缓存

1.浏览器缓存 浏览器第一次请求时: 浏览器在后续请求时: 浏览器缓存包含两种类型,即强缓存(也叫本地缓存)和协商缓存,浏览器在第一次请求发生后,再次请求时: ①浏览器在请求某一资源时,会先获取该资源缓存的header信息,判断是否命中强缓存(cache-control和expires信息),若命中直接从缓存中获取资源信息,包括缓存header信息;本次请求根本就不会与服务器进行通信;在firebug下可以查看某个具有强缓存资源返回的信息,例如本地firebug查看的一个强缓存js文件 ②如果没有命中强

weixin_45744454的博客 226
上一篇: webpack3如何升级为webpack4?
下一篇: 如何理解vue的computed?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

趁你还年轻233

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值