当前位置: 首页 > news >正文

【看完就透】前端缓存、HTTP缓存超详细讲解

【看完就透】前端缓存、HTTP缓存超详细讲解

  • 前言
  • 强制缓存
    • expires
  • 协商缓存

前言

在任何一个前端项目中,访问服务器获取数都是很常见的事情,但是如果相同的数据被重复请求了不止一次,那么多余的请求次数必然会浪费网络带宽,以及延迟浏览器渲染所要处理的内容,从而影响用户的使用体验。如果用户使用的是按量计费的方式访问网络,那么多余的请求还会隐形的增加用户的网络流量资费。因此考虑使用缓存技术对已获取的资源进行重用,是一种提升网站性能与用户体验的有效策略。

缓存的原理是在首次请求后保存一份请求资源的响应副本,当用户再次发起相同请求后,如果判断缓存命中则拦截请求,将之前存储的响应副本返回给用户,从而避免重新向服务器发起资源请求。

缓存的技术种类有很多,比如代理缓存、浏览器缓存、网关缓存、负载均衡器及内容分发网络等,它们大致可以分为两类:共享缓存私有缓存。共享缓存指的是缓存内容可被多个用户使用,如公司内部架设的Web代理;私有缓存指的是只能单独被用户使用的缓存,如浏览器缓存。

HTTP缓存应该算是前端开发中最常接触的缓存机制之一,它又可细分为强制缓存协商缓存,二者最大的区别在于判断缓存命中时,浏览器是否需要向服务器端进行询问以协商缓存的相关信息,进而判断是否需要就响应内容进行重新请求。下面就来具体看HTTP缓存的具体机制及缓存的决策策略。

强制缓存

对于强制缓存而言,如果浏览器判断所请求的目标资源有效命中,则可直接从强制缓存中返回请求响应,无须与服务器进行任何通信。

在介绍强制缓存命中判断之前,我们首先来看一段响应头的部分信息:

```
access-control-allow-origin: *
age: 734978
content-length: 40830
content-type: image/jpeg
cache-control: max-age=31536000
expires: Web, 14 Fed 2025 12:23:34 GMT
```

其中与强制缓存相关的两个字段是 expirescache-controlexpires 是在 HTTP 1.0 协议中声明的用来控制缓存失效日期时间戳的字段,它是由服务器端指定后通过响应头告知浏览器,浏览器在接收到带有该字段的响应体后进行缓存。

若之后浏览器再次发起相同的资源请求,便会对比 expires 与本地当前的时间戳,如果当前请求的本地时间戳小于 expires 的值,则说明浏览器缓存的响应还未过期,可以直接使用而无须向服务器端再次发起请求。只有当本地时间戳大于 expires 值发生缓存过期时,才允许重新向服务器发起请求。

expires

为了让大家有一个更直观的感受,我们来看一个 expires 的示例 demo:

第一次访问页面时,请求了 //img/01.jpg
由于我们在服务端为 /img/01.jpg 的请求设置响应请求头 Expires: new Data('2021-4-30 12:17:57').toUTCString()
那么在 2021-4-30 12:17:57 时间之前,我们刷新页面进行第二次访问,发现只请求了 //img/01.jpg 的请求资源来自于内存缓存,服务端没有接收到 /img/01.jpg 的请求;
这就是 expires 控制缓存的使用方法。

协商缓存


http://www.mrgr.cn/news/9509.html

相关文章:

  • VNC的一些常用操作
  • 如何使用Gitee管理自己的项目
  • 25 配置交换机网关
  • LeetCode 面试经典 150 题回顾
  • C语言初阶(四)字符函数和字符串函数
  • 谷歌、火狐及Edge等浏览器中实现allWebPlugin中间件自动安装及升级
  • 【计算机网络】名词解释--网络专有名词详解(更新)
  • iOS 通知
  • 学习ComfyUI的一个网站:www.comflowy.com
  • 【Tools】大模型中的 Agent 是什么
  • Linux TCP多线程服务器
  • R语言中theme的调整技巧汇总
  • go const(常量)
  • 零基础5分钟上手亚马逊云科技核心云架构知识-创建NoSQL数据库
  • Bootstrap、Ant Design、Element UI特点和优势
  • React学习笔记(三)——redux状态管理工具
  • Web-ssrfme--redis 未授权访问攻击
  • flink周边使用技巧与汇总
  • ES6笔记总结(Xmind格式):第三天
  • vue打包设置 自定义的NODE_ENV