首页 > 其他分享 >浏览器缓存:强缓存与协商缓存实现原理有哪些?

浏览器缓存:强缓存与协商缓存实现原理有哪些?

时间:2024-07-18 12:27:49浏览次数:9  
标签:缓存 浏览器 协商 Modified 更新 服务器 客户端

1、强缓存:设置缓存时间的,那么在这个时间内浏览器向服务器发送请求更新数据,但是服务器会让其从缓存中获取数据。
可参考:
彻底弄懂强缓存与协商缓存 - 简书

2、协商缓存每次都会向浏览器询问,那么是怎么询问的呢?

cache-control: no-cache,每次请求都回询问服务端,那么是如何询问?

当浏览器发送的请求中包含Cache-Control: no-cache时,意味着浏览器不希望使用本地缓存的副本,而是希望向服务器询问资源是否有更新。浏览器如何询问服务器是否有更新,这是通过HTTP协议的机制来实现的。

具体来说,服务器会通过以下几种方式来告诉浏览器是否有更新:

  1. ETag/If-None-Match: 服务器为每个资源分配一个唯一的ETag标识(Entity Tag)。如果下次请求时,客户端发送的If-None-Match头部包含之前服务器分配的ETag,则表示客户端想知道服务器自上次给予的ETag之后,资源是否有更新。

  2. Last-Modified/If-Modified-Since: 服务器在响应请求时,会通过Last-Modified头部告知资源的最后修改时间。如果下次请求时,客户端发送的If-Modified-Since头部包含之前服务器告知的最后修改时间,则表示客户端想知道自此时点之后,资源是否有更新。

  3. 200 OK with content: 如果服务器判定资源有更新或者是必须重新发送的,会响应200 OK状态码和新的资源内容。

  4. 304 Not Modified: 如果服务器判定资源自客户端上一次请求以来未更改,会响应304 Not Modified状态码,表示客户端可以继续使用本地缓存的副本。

以下是一个简单的HTTP请求和响应示例,展示了使用Cache-Control: no-cache时浏览器如何询问服务器资源是否有更新:

在这个例子中,请求中包含了If-None-MatchIf-Modified-Since头部,询问服务器资源自指定时间以来是否有更新。服务器根据这些头部以及资源的当前状态,如果有更新,则响应200 OK和新的资源内容;如果没有更新,则响应304 Not Modified,表示可以继续使用客户端的缓存副本。

标签:缓存,浏览器,协商,Modified,更新,服务器,客户端
From: https://blog.csdn.net/2401_85955297/article/details/140463863

相关文章

  • Java使用流实现浏览器自动下载文件(附前端请求代码)
    一、注意事项1.需要注意后端的响应头设置,告诉浏览器下载文件类型(Content-Type)以及文件名称。2.不同环境下中文路径以及文件名会出现乱码情况路径解决:filePath=newString((filePath).getBytes("ISO8859-1"),"UTF-8");文件名解决:response.setHeader("Content-Dispositi......
  • redis学习-12(实现分布式锁、消息队列、缓存一致性问题、单线程快的原因、跳跃表)
    引用以下内容:redis实现分布式锁:Redis分布式锁-这一篇全了解(Redission实现分布式锁完美方案)Redis实现分布式锁的7种方案,及正确使用姿势!redis实现消息队列Redis的学习教程(十)之使用Redis实现消息队列缓存一致性问题想要保证数据库和Redis缓存一致性,推荐采用先更新数......
  • uniapp设置缓存过期时间
    在uni-app中,如果你想要实现数据的缓存并让这个缓存保留24小时,你可以使用uni.setStorageSync(同步存储)或uni.setStorage(异步存储)方法结合JavaScript的日期时间处理来实现。不过,需要注意的是,uni.setStorage系列API本身并不直接支持设置过期时间。因此,你需要自己管理过期时间。以下是......
  • redis学习-11(缓存)
    缓存的收益和成本分析收益:1)加速读写2)降低后端负载成本:1)数据不一致性2)代码维护成本3)运维成本使用场景:1)开销大的复杂计算2)加速请求响应缓存更新策略的选择和使用场景LRU/LFU/FIFO算法剔除:当缓存使用量大于预设的最大值时候,对现有数据进行剔除,一致性最差,维护成本低超时剔......
  • 浏览器web在线打印如何实现
    在B/S应用系统开发中常常遇到表单打印需求,尤其是OA、ERP类的企业运营管理系统,打印的需求很常见,但WEB应用的打印一直以来是一个难题,特别是在应用中完成标签打印(如包裹面单、货运标签等)、票据打印(如零售小票)难度较大,其难度在于如何将需要打印的内容,精确套打到标签、票据中,精确控制分......
  • 数组是缓存对齐的特征
    Anarrayiscache-aligned:Thesizeofeacharrayelementmatchesthesizeofthecacheblock.Thestartingaddressofthearrayisamultipleofthecacheblocksize.Let'selaborateonthesepoints:ArrayElementSizeMatchesCacheBlockSizeI......
  • Spark缓存优化:清除全部缓存
    Spark算子是分为行动子算子和转换算子的,只有遇到行动算子,计算任务才会生成一个Job任务,当算子行动算子多起来,并且交织复杂的时候,Spark去追溯数据血缘就会比较耗时了,通常我们都会直接通过persist算子存储中间的计算结果,减少数据的重复计算。//存储中间计算结果,避免Spark重复计算v......
  • 详解Spring循环依赖,以及spring如何通过三级缓存解决循环依赖问题
     首先为了方便理解后面的图解,首先要了解spring的bean的生命周期,下图是sping的bean的生命周期流程图。图解:就是在初始化实例化A时,发现A里面依赖了B,所有看B是否在容器中存在,结果B不存在又去实例化B,B中又依赖与A,但是也不存在,就这样陷入一个死循环就是循环依赖。图解:实......
  • 浏览器工作过程及相关名词
    网页获取在计算机网络中,双方通过知道彼此的IP地址,即可建立通信通信协议包括TCP与UDP两种,其中:TCP建立连接过程如下(三次挥手):sequenceDiagramparticipantAparticipantBA->>B:SYNB->>A:SYN,ACKA->>B:ACKTCP断开连接过程如下(四次握手):sequenceDiagrampart......
  • 快速上手 Caffeine:Java 缓存库初学者指南
    一、背景简介:Caffeine是一个高性能的Java缓存库,旨在为现代应用程序提供快速、高效的缓存解决方案。它由GoogleGuavaCache的创始人之一开发,具备基于时间的过期、基于大小的回收、异步加载、统计信息等多种特性。Caffeine的性能有多么强大呢?以下是官方给出的基准测试......