浏览器缓存和CDN

秒懂边缘云 | CDN基础入门:CDN缓存配置及优化 在本章节中,我们共同学习如何通过合理配置CDN缓存功能来提升业务缓存的利用率,实现终端用户访问体验的提升。 阅读详情


前言

浏览器缓存是前后端以及CDN的常用技术,可以减少对服务端的请求压力,减少客户端网络流量,并加快浏览器页面的加载。


一、浏览器缓存是什么?

浏览器缓存,是指浏览器本地缓存了已请求成功过的服务器文件,在下次加载文件时,根据缓存策略从浏览器本地缓存中读取或者从服务器读取。
例如,disk cache就是典型的浏览器缓存。
在这里插入图片描述
浏览器缓存的发起方是服务器(包括应用服务器、CDN、Nginx代理服务器等)。服务器在某次HTTP的response中设置header参数,表示启用浏览器缓存,浏览器收到后,遵循HTTP的规范,在下一次request中触发浏览器缓存。

HTTP有2种浏览器缓存策略:强缓存策略和协商缓存策略。

二、强缓存策略

强缓存策略,是指在缓存文件有效期内,直接加载缓存文件,不再向服务器发起请求。

强缓存策略有2种设置方式:Expires和Cache-Control(Http1.0中还有Pragma,等同于Cache-Control no cache)。

1. Expires

服务器在response头中设置Expires过期时间,如图所示。
在这里插入图片描述
Expires是http1.0版本的产物,使用的是服务器时间,精确到秒,因此有客户端时间不一致的问题。在http1.1中被Cache-Control替代。

2. Cache-Control

服务器在response头中设置Cache-Control(request头中也可以设置),如图所示。
在这里插入图片描述
常见的Cache-Control字段:

public 指明响应可以被任何缓存保存。
private 表明响应消息的部分或所有部分是为一个用户准备的并且不得被共享缓存保存。
no-cache 缓存不能利用此响应在没有通过源服务器对它进行成功的重验证的情况下去满足后续的请求。
no-store 如果在请求里被发送,一个缓存不能保存此请求或此请求响应的任何部分。如果在响应里被发送,一个缓存不能保存此响应或引起此响应请求的任何部分。
max-age=XX 表明客户端愿接受一个这样一个响应,此响应的年龄不大于客户端请求里max-age指定时间(以秒为单位)。

请参照:rfc2616中的14.9

三、协商缓存策略

协商缓存策略,是指浏览器向服务器发送请求,并带上缓存参数,由服务器来判定是否过期并做相应的返回。

协商缓存策略有2种设置方式:Last-Modified和Etag。

1. Last-Modified

服务器在response头中设置Last-Modified;浏览器在下次请求的头中设置If-Modified-Since,如图所示。
在这里插入图片描述
在这里插入图片描述
Last-Modified精确到秒,代表了服务器中文件的最后修改时间。
If-Modified-Since值等于上次获得的Last-Modified,代表了浏览器端缓存文件的最后修改时间。
服务器收到请求后,对比文件最新修改时间和请求中的If-Modified-Since,如果未变则返回304,变更则返回200和最新文件。

2. Etag

服务器在response头中设置Etag;浏览器在下次请求的头中设置If-None-Match,如图所示。
在这里插入图片描述
在这里插入图片描述

Etag是文件指纹,需要服务器消耗CPU资源计算得到。
If-None-Match值等于上次获得的Etag,代表了浏览器端缓存文件的指纹。
服务器收到请求后,计算最新文件的Etag,对比请求中的If-None-Match,如果未变则返回304,变更则返回200和最新文件。

Etag解决的第一个问题是,文件未变,但是服务器记录的文件时间变了(例如:CDN拉取源站后缓存),此时Last-Modified会认为文件变了而返回文件;
Etag解决的另一个问题是,Last-Modified只精确到秒,同一秒内文件被反复修改,无法正确反映出来。

四. 缓存策略执行顺序

1. 同策略优先级

允许同策略的缓存字段同时设置,同策略优先级如下:
强缓存:
Cache-Control > Expires,即2者并存时先判断Cache-Control。
协商缓存:
Etag > Last-Modified,即2者并存时先判断Etag。

2. 不同策略执行顺序

允许不同策略的缓存字段同时设置,浏览器先执行强缓存,已过期再执行协商缓存,具体如下:

  1. 第一次请求时,服务器返回200,并在respone headers中设置缓存参数。
  2. 第二次请求时,如图所示,浏览器判断缓存参数,命中强缓存就直接200,不再请求服务器;否则开始协商缓存,向服务器发起请求,若文件未改变则返回304(Not Modified),否则服务器会返回新的文件。
    在这里插入图片描述

3. 只启用协商缓存策略

如果没有开启强缓存,只开启了协商缓存,浏览器会根据 Last-Modified自行推算缓存时长。也就是说,只有协商缓存情况下,浏览器也不一定会立刻向服务器发起请求,它会根据推算的缓存时长直接读取本地缓存,返回200,如图所示。
在这里插入图片描述

缓存时长的算法,不同浏览器各自实现,Chrome并没有公布,Firefox的算法是:缓存时长 = (Date - Last-Modified) / 10,即如果文件已经很久没变了,那么认为它以后变的可能性也不高,推算的缓存时长较大。

五. CDN

1. CDN加速原理

内容分发网络CDN(Content Delivery Network),将源站资源缓存到CDN节点,当终端用户请求访问和获取源站资源时无需回源,可就近获取CDN节点上已经缓存的资源,提高资源访问速度,同时分担源站压力。
CDN加速后,有可能会触发浏览器协商缓存,如图所示:
在这里插入图片描述

下面的例子来自阿里云,注意,CNAME是CDN替换域名的关键。
假设加速域名为www.aliyundoc.com,接入CDN开始加速服务后,当终端用户在北京发起HTTP请求时,处理流程如下图所示。
在这里插入图片描述
1.当终端用户向www.aliyundoc.com下的指定资源发起请求时,首先向Local DNS(本地DNS)发起请求域名www.aliyundoc.com对应的IP。
2.Local DNS检查缓存中是否有www.aliyundoc.com的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向网站授权DNS请求域名www.aliyundoc.com的解析记录。
3.当网站授权DNS解析www.aliyundoc.com后,返回域名的CNAME www.aliyundoc.com.example.com。
4.Local DNS向阿里云CDN的DNS调度系统请求域名www.aliyundoc.com.example.com的解析记录,阿里云CDN的DNS调度系统将为其分配最佳节点IP地址。
5.Local DNS获取阿里云CDN的DNS调度系统返回的最佳节点IP地址。
6.Local DNS将最佳节点IP地址返回给用户,用户获取到最佳节点IP地址。
7.用户向最佳节点IP地址发起对该资源的访问请求。
8.如果该最佳节点已缓存该资源,则会将请求的资源直接返回给用户(步骤8),此时请求结束。
如果该最佳节点未缓存该资源或者缓存的资源已经失效,则节点将会向源站发起对该资源的请求。获取源站资源后结合用户自定义配置的缓存策略,将资源缓存到CDN节点并返回给用户(步骤8),此时请求结束。

2. CDN的浏览器缓存

CDN缓存了源站上的文件,因此,CDN存在文件过期的问题,用户访问CDN时,可能会得到过期的文件。CDN存在2种过期:
(一)CDN缓存文件的过期
如果源站文件的访问服务没有提供协商缓存参数,那么CDN只能根据后台配置的缓存策略,对缓存文件进行过期判定。因此,CDN会返回Etag和Last-Modified,它表达的是CDN缓存的过期,而不是源站文件的过期。

(二)源站文件的过期
如果源站文件的访问服务有提供协商缓存参数,那么CDN可以根据缓存参数动态调整过期判定,具体根据CDN实现和缓存配置而定。此时,CDN有可能返回源站文件的Etag和Last-Modified。

总结

本文简单介绍了浏览器缓存,再结合CDN进一步介绍了浏览器缓存的情况。

CDN之浏览器 HTTP 协议缓存机制详解 最近在准备优化日志请求时遇到了一些令人疑惑的问题,比如为什么响应头里出现了两个 cache-control、为什么明明设置了 no-cache 却还是发请求,为什么多次访问时有时请求里带了 etag,有时又没有带?等等。。。后来查了一些资料以及同事亲自验证,总算对这些问题有了个清晰的理解,现在整理出来以备忘。 阅读详情

相关推荐

CDN缓存的艺术(二):缓存策略详解——哪些该存?存多久?如何更新?

上一篇,我们深入了解了HTTP缓存头部这套“遥控指令”,知道了`Cache-Control`、`Expires`、`ETag`和`Last-Modified`是如何工作的。这些头部为我们提供了控制缓存行为的工具。然而,仅仅了解工具是不够的,更重要的是如何巧妙地运用这些工具来制定一套行之有效的**CDN缓存策略**。 一套优秀的CDN缓存策略,目标是在“尽可能快地把内容给用户”和“确保用户拿到的是最新内容”之间找到最佳平衡点。这需要我们回答三个核心问题:

码觉客的博客 323

一文弄懂CDN缓存

CDN即内容分发网络CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求,CDN的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定,通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层虚拟网络,CDN。

太阳当空照,花儿对我笑,微风轻轻拂,心情无限好。 2063

决策树(分类树、回归树)

决策树 前言:第一篇博客,最近看完决策树,想着归纳一下,也方便自己以后回顾。写的会比较全面一些,可能会有很多不太正确的地方,欢迎大家交流指正 : ) 决策树模型: 决策树模型是运用于分类以及回归的一种树结构。决策树由节点和有向边组成,一般一棵决策树包含一个根节点、若干内部节点和若干叶节点。决策树的决策过程需要从决策树的根节点开始,待测数据与决策树中的特征节点进行比较,并按照比较结果选...

你午睡了吗 9万+

前端性能优化 | CDN缓存

通过使用CDN加载这些公库,可以将它们缓存在CDN的节点服务器上,提供更快速的加载和传输,无需在本地部署维护这些库的副本。:将网站的静态资源缓存在多个节点服务器上,当用户访网站时,大部分的资源可以从离用户较近的节点服务器上获取,少了对原始服务器的访问。减轻了源服务器的负载压力,节约了网络带宽的使用,提高了整体的网络效率。综上所述,CDN的作用是提供快速、可靠的内容分发服务,加速网站访问、节省网络带宽、提高可用性和稳定性,抵御网络攻击,提供高质量的视频内容传输,从而改善用户体验,提升网站的性能和效果。

前端梦工厂 2693

PWM调节DCDC参数计算原理

SOC芯片的核电压、GPU电压、NPU电压、GPU电压等,都会根据性能和实际应用场景来进行电压和频率的调整。 即动态电压频率调整DVFS(Dynamic Voltage and Frequency scaling),优化性能和功耗。

电子绿洲的博客 3165

【Qt-4】QT基于qhttp-server搭建http服务器

QT搭建http服务器

WXG1011的博客 5714

浏览器缓存和CDN缓存

CDN是什么? ...

那谁家的博客 3354

数字经济新质生产力数字化转型数据要素流通交易解决方案:数据要素化演进路径与管理、公共数据授权运营平台体系、数据底座、典型应用场景

数字经济的发展依赖于数据要素的有效流通与交易,数字化转型的核心在于数据的全生命周期管理和价值释放。数据要素化通过数据资源化、资产化和资本化的“三化”过程,实现其经济与社会价值。数据管理涵盖采集、存储、加工、分析等环节,支持数据的度量与交换。公共数据、企业数据和个人数据通过场内、场外及二级市场交易实现资本化。公共数据开发利用面临隐私泄露、监督管理难等痛点,目标是构建授权运营平台体系,确保数据流通的安全与效率。平台体系包括统一门户、授权管理、运营管理、合规监督等核心功能,支持明文、密文和可信交换流通方式。数据底

weixin_44094929的博客 1003

浏览器缓存、HTTP缓存(强缓存、协商缓存),浏览器缓存和CDN的关系

浏览器将请求过的资源(html、js、css、img)等,根据缓存机制,拷贝一份副本存储在浏览器的内存或者磁盘上。如果下一次请求的url相同时则根据缓存机制决定是读取内存或者磁盘上的数据还是去服务器请求资源文件。缓存通过url来判断,如果url不同则是新的资源。所以我们开发时前端会将一些js、css等文件在后面加hash值来避免资源更新时浏览器仍读取缓存文件,导致需要刷新才能获取新的资源的问题。 CDN的定义 客户端访问网站的过程 浏览器缓存+CDN缓存 no-cache与no-store的区别 304

muzidigbig的博客 4294

「大模型学习」(11)kv cache与vllm详解,一文读懂!

Key(键):表示上下文的特征。Value(值):表示上下文的内容。Query(查询):表示当前 token 的查询向量。AttentionQKVsoftmaxQKTdkVAttentionQKVsoftmaxdk​​QKT​V),每次生成一个新 token(比如下一个词),模型会再次查看之前的所有K和V,以计算当前 token 的注意力。问题:每次都重新计算之前的 K/V 很浪费!项目维度(简化)含义Q当前 token 的查询向量。

qq_43044037的博客 5405

APS生产排程系统——ERP、MES、APS系统的关联和区别

APS生产排程系统——ERP、MES、APS系统的关联和区别

这里有一只小马吖 2万+

关于CDN与缓存(浏览器和CDN)

http://www.cnblogs.com/blogbyhuer/p/9335257.html 本文目录:一、引入      二、CDN定义      三、关于缓存      四、浏览器缓存 一、引入 客户端直接从源站点获取数据,当服务器访问量大时会影响访问速度,进而影响用户体验,且无法保证客户端与源站点间的距离足够短,适合传输数据。 CDN解决的正是如何将数据快速可靠地从源站点传...

tianjinsong的专栏 9150

K8S搭建(centos)四、安装K8S

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2653

缓存:浏览器缓存、DNS缓存和CDN缓存

代码已经关联到github: 链接地址 文章有更新也会优先在这,觉得不错可以顺手点个star,这里会持续分享自己的开发经验(: 浏览器缓存 浏览器再次发送请求时: 首先判断强缓存,强缓存生效直接使用强缓存(200 from memory、from disk 先从内存,再从硬盘) 如果强缓存不生效会判断 没有设置协商缓存就直接重新请求(200) 设置了协商缓存则由服务器判断缓存是否失效,没有失效就继续使用缓存(304,同强缓存的获取方式),失效则返回新的文件(200) 缓存分类 强缓存 强缓存.

qssn的博客 3462

飞牛NAS 0day漏洞导致断网?完整的排查修复方案来了(含一键检测修复工具)

家里网络莫名断网,折腾十来天才发现是NAS被0day漏洞利用了?🔍 本文详细记录了从发现问题到最终解决的全过程,包括如何自查系统是否被入侵、使用检测脚本和专杀脚本进行修复,以及如何通过端口管理、访问控制、监控预警等措施加固系统安全 🔒,帮助遇到同样问题的用户快速排查和解决NAS安全风险 ✅

XiaoqiangClub的博客 5521

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cdn实现原理和浏览器缓存的区别

cdn(Content Delivery Network)delivery 英:[dɪ'lɪv(ə)ri] 传送 传递 cdn组成: CDN是一种组合技术,其中包括源站、缓存服务器、智能DNS、客户端等几个重要部分。 核心是智能DNS。 CDN加载过程: 客户端输入url ----> dns域名服务器对域名进行解析 -----> 域名解析权交给CNAME指向的...

前端361 1473

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

cdn和浏览器缓存

CDN加速原理:通过动态域名解析,网友的请求被分配到离自己最快的服务器。CDN服务器直接返回缓存文件或通过专线代理原站的内容。网络加速+内容缓存,有效提供访问速度 解决跨域和分流问题(减轻源站的负载) 浏览器缓存 服务器返回的响应中,携带以下四个常用的响应头,浏览器会通过判别这些响应值来决定资源缓存的状态。 ETag Cache-Control public 所有内容都要被缓存,客户端和代理服务器(CDN)都可以被缓存 private 内容只能被缓存到客户端,不能被缓存到CDN no-cache.

混世小妲己 696

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

CDN和浏览器缓存

1,CDN 旨在解决的最重要的问题是什么,我们称之为网络延迟,通过网络获取资源总是比从本地获取慢,无论服务器是在同一个局域网中还是位于世界的另一个角落,都是如此。这里的速度差异是 IT 行业的一个核心问题,开发者想了很多办法试图去弥补这个差异,CDN 就是应用最为广泛的一个解决方案。 2,浏览器缓存 在未介入CDN之前,用户在第一次访问网站服务器的时候,浏览器会从服务器获取所有的资源,...

weixin_30618985的博客 110

浏览器缓存、 HTTP缓存(强制缓存、协商缓存),浏览器缓存和CDN的关系

CND的定义 CDN:Content Delivery Network/Content Ddistribute Network内容分发网络 客户端访问网站的过程: 没有CDN: 用户在浏览器访问栏中输入要访问的域名 浏览器想DNS服务器请求对该域名的解析 DNS服务器返回该域名的IP地址给浏览器 浏览器使用该IP地址向服务器请求内容 服务器将用户请求的内容返回给浏览器 使用CND ...

qq867263657的博客 1355

浏览器缓存和CDN缓存基本介绍

CDN是什么? 谈到CDN的作用,可以用8年买火车票的经历来形象比喻: 8年前,还没有火车票代售点一说,12306.cn更是无从说起。那时候火车票还只能在火车站的售票大厅购买,而我所住的小县城并不通火车,火车票都要去市里的火车站购买,而从县城到市里,来回就是4个小时车程,简直就是浪费生命。后来就好了,小县城里出现了火车票代售点,可以直...

tank的博客 344

HTTP缓存机制(浏览器和CDN)

前言 我们用http访问时,会先发送一个请求,之后服务器返回一个应答,在Chrome的开发者工具(按F12或右击选择检查)中展现了整个过程: 第一部分General是概要,包含请求地址,请求方式,状态码,服务器地址以及Referrer 策略。 第二部分是应答头部,是服务器返回的。 第三部分是请求头部,是客户端发送的。 一、引入 客户端直接从源站点获取数据,当服务器访问量大时会影响...

Kim_Weir的专栏 1360

缓存架构的终极总结:从浏览器缓存到 CDN、Redis 和向量缓存的统一模型

拦截 + 存储 + 过期 + 回源。每一层的参数不同,但逻辑相同。理解了这个模型,缓存管理就从"四套独立系统"变成了"一套逻辑的四组参数"。参数浏览器CDNRedis向量拦截方式精确URL精确Hash/语义存储介质本地磁盘边缘节点内存向量库过期策略TTLTTL+推送TTL+删除重建回源成本HTTP请求源站请求DB查询embeddingTTL兜底 + 关键路径主动失效——不是所有数据都需要即时失效,但关键数据必须。容量上限 + LRU淘汰。

2401_87746054的博客 3156

CDN缓存和浏览器缓存

CDN的全称是Content Delivery Network,即内容分发网络,旨在解决网络延迟。CDN是构建在网络之上内容分发网络,依靠在各地部署的缓存服务器,通过中心平台的负载均衡/内容分发/调度等功能模块,使用户可以就近获取所需要的内容,从而达到降低网络用塞,提高系统访问速度的技术。CDN的关键技术是内容存储和分发技术。 浏览器缓存:当我们请求一个网页的时候,服务器会向浏览器返回大量数据,但是这些数据需要全部缓存吗?浏览器又是如何区分哪些数据需要进行缓存,哪些是需要实时跟源站获取的?浏览器的缓存策略

淋雨西河的博客 394

android缓存策略跟cdn,缓存学习(五)CDN缓存(下)-CDN缓存策略、CDN缓存和浏览器缓存之间的关系、回源和回源比...

CDN缓存策略CDN(Content Delivery network,内容分发网络),通过GSLB技术使得用户能访问到最近物理机房的文件,以节省网络时间,也就是说一份文件可能会在全国乃至全球的多个服务器存在,这就涉及到一个文件分发的问题,目前通常的CDN都是采取回源策略来同步文件,即每个cdn域名关联了一些源服务器,发布文件只要发布到源服务器即可,cdn会根据策略从源服务器拉取文件,以保证用户能...

weixin_29865183的博客 567

深入剖析浏览器、Nginx 与 CDN 缓存机制

浏览器缓存、nginx 缓存和 CDN 缓存虽然作用于不同的层面,但都致力于提升网络应用的性能。通过深入理解它们的缓存机制,并采取有效的管理和控制措施,我们可以在保证用户获取最新内容的同时,最大限度地利用缓存技术,减少服务器负载,提升应用的响应速度和用户体验。在实际应用中,需要根据具体的业务需求和场景,灵活配置和调整这些缓存策略,以达到最佳的性能优化效果。

技术管理修行 2052
上一篇: 程序员绘图指南
下一篇: Linux内核的TCP源码入门(一)
lic721
博客等级 码龄17年 36粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值