首页 > 其他分享 >浏览器缓存

浏览器缓存

时间:2024-06-04 10:34:01浏览次数:22  
标签:缓存 浏览器 请求 协商 modify 服务器

浏览器缓存分为强制缓存和协商缓存

强制缓存就是浏览器向服务器请求资源,服务器响应头给予一个cache-control 或者expires ,在这个时间之内,就不会向服务器请求资源,但是强制缓存有个问题:如果服务端已经更新数据了,但是我们的本地浏览器还使用之前的旧数据,也就是使用本地的缓存,那么就不对了对吧,所以我们要使用协商缓存。

当然cache-control有几个常用的属性

  • no-cache 使用协商缓存
  • no-store不使用缓存,每次都要向服务器发送请求
  • max-age=数字 缓存的时间

如果我们的cache-control是no-cache那么就是协商缓存了,就走协商缓存的逻辑

协商缓存的状态码是304,浏览器向服务器发送请求,服务器会根据请求头携带的一些参数来判断是否命中协商缓存,如果命中,那么就告诉我浏览器从自己的缓存中获取数据,否则就服务器返回新的数据

在浏览器访问服务器的时候,服务器会在响应头给予一个last-modify参数用来代表我资源文件最后一次的修改时间(记住存储的是时间)。那么浏览器再次发送请求的时候,会在请求头中携带一个if-modify-since参数,这个数字大部分情况下是等于服务器响应头返回的last-modify,服务器接收到请求之后,会判断last-modifyif-modify-since是否相等,如果相等,就返回304,并告诉浏览器使用缓存,否则服务器返回一个新的文件数据。

但是使用last-modifyif-modify-since有一个缺点,如果我们这个文件用时300ms修改了,那么这个if-modify-since并没有改变,因为他只能精确到秒,文件已经修改了,但是if-modify-since 没有改变,所以并不严谨,我们就推出了新的参数Etagif-none-match

Etag可以理解成是last-modifyif-none-match

  • Etag是加载资源时,服务器返回的响应头字段,是对资源的唯一标记,值是hash码(md5)。
  • Hash值是根据不同的文件,生成的一个字符串
  • 浏览器在下一次加载资源向服务器发送请求时,会将上一次返回的Etag值放到请求头里的If-None-Match
  • 服务器接收到If-None-Match的值后,会拿来跟该资源文件的Etag值做比较,如果相同,则表示资源文件没有发生改变,命中协商缓存。

标签:缓存,浏览器,请求,协商,modify,服务器
From: https://blog.csdn.net/weixin_64534765/article/details/139435435

相关文章

  • 前端记忆函数和LRU缓存
    在Js中,“记忆化(Memoization)”是一种优化技术,它通过存储昂贵函数的结果,并复用这些结果以避免重复执行,从而可以加快代码执行速度。这种技术在处理递归和迭代问题时尤其有用。下面是一个记忆化函数的一般实现:functionmemoize(fn){letcache={}returnfunction(.......
  • 谷歌浏览器Lighthouse网页性能分析工具使用
    需要使用谷歌浏览器的无痕模式要不然其他浏览器插件的脚本会影响页面的性能判断使用截图操作界面点击分析按钮开始分析生成分析建议部分:红色是有必要解决的性能提升建议红色建议分析:lighthouse文档文档地址:https://developer.chrome.com/docs/lighthouse/perf......
  • Spring Boot入坑-6-缓存
    概述位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为缓存(Cache)典型的如CPU与内存之间L1、L2、L3缓存,能让CPU更有聪明、更高效的执行任务在软件项目中,相比于访问网络、磁盘、DB等介质或设备,内存具有更高的效率,所以很多的时候会利用内存作为......
  • nginx实现网页缓存防篡改
    简介使用网站防篡改对指定的敏感页面设置缓存,缓存后即使源站页面内容被恶意篡改,WAF也会向访问者返回预先缓存好的页面内容,确保用户看到正确的页面。启用 网页防篡改、敏感信息防泄露开关,才能使用该功能。填写精确的要防护的路径,可以防护该路径下的text、html和图片等内容......
  • 浏览器 performance 测试页面性能,查看阻塞代码
    截图黄色指的js执行紫色指的浏览器渲染一般只需要看js和render这2个就行,其他不用看,并从这2个中看出哪里的代码导致阻塞线程比较久。main线程推测main线程就是浏览器的主线程,主要负责浏览器的渲染和js代码执行,由此可见,浏览器用于渲染和js执行是一个线程,也就是主线程。渲......
  • redis自学(45)缓存同步
                             整个多级缓存的架构  ......
  • 浏览器重绘和回流
    概述重绘指的是元素重新绘制,一般性能消耗很小,不用在意,一般修改颜色或者虚拟隐藏都是重绘回流指的是修改元素宽高或者位置或者获取元素宽高位置等都是回流,性能消耗较大。重绘(repaint):元素样式改变不影响布局回流(reflow):也叫重排,当元素的尺寸、结构变化或触发某些属性时,浏......
  • 今天分享一篇Python启动浏览器的文章
    1.首先是浏览器选择,因为我之前自己电脑测试,安装了Firefox浏览器,版本号:45.0.2。但是这个版本号的浏览器找不到对应的驱动,但是本人又不想卸载这个浏览器,所以转而使用谷歌浏览器进行自动化测试了。Firefox驱动下载地址:https://github.com/mozilla/geckodriver/releases,如果有需要的......
  • Nginx实现缓存
    目录资源列表基础环境关闭防火墙关闭内核安全机制修改主机名一、安装httpd二、安装nginx准备nginx源配置nginx启动部分页面不缓存(可选)测试在client节点请求nginx关闭httpd请求nginx        本文详细记录了nginx实现缓存的配置步骤,nginx是一个非常优秀......
  • 【Redis】什么是缓存击穿 ? 怎么解决
    缓存击穿(CacheBreakdown)是指缓存中某个热点数据在某一时刻失效,大量并发请求同时查询这个数据,由于缓存失效,这些请求会直接打到数据库,可能导致数据库瞬间负载过高,甚至崩溃。与缓存穿透不同,缓存击穿是针对一个特定的热点数据在高并发场景下的失效问题。解决缓存击穿的方法......