彻底缓存与协商缓存(浏览器缓存)

前言:

浏览器缓存也称http在浏览器向服务器请求资源的时候,许多静态的资源是长时间不会更改的。如果重复的发起请求,不断从服务器获取长时间不会改变的资源,不仅会浪费宽带,增加服务器的压力,甚至影响到用户的体验。

通过浏览器缓存就能设置资源缓存。缓存后能减少资源的请求、减少响应的时间。

浏览器缓存:
  • 客户端向服务器发起请求时,会根据HTTP响应头的字段加载缓存的资源。
  • 浏览器缓存从第二次开始。第一次请求从服务器加载所有资源,第二次请求浏览器根据响应头的字段加载缓存资源。
  • 浏览器缓存分为 彻底缓存协商缓存命中协商缓存会向服务器发起请求(服务器会分析数据客户端数据是否需要更新),彻底缓存不会向服务器发起请求。
彻底缓存(Cache-Control):

彻底制缓存在客户端本地,请求直接从本地缓存中加载,不去请求服务器,返回的状态码是 200。彻底缓存需要 Cache-Control 字段, Cache-Control 是 HTTP 响应头中的字段。你可能在网上会看到有人会说还有 expires,pragma ,但都是 http1.0 的产物,现在应用最广泛的是 http1.1。所以我们减少一点学习压力,熟悉 Cache-Control 字段即可。

当我们向服务器请求资源时,服务器认为需要被缓存的资源比如(css,js文件 、图片),这些资源在响应头中都会默认携带 Cache-Control: public, max-age=0 。public, max-age=0 是默认值(相当于没有对资源缓存进行处理)。

Cache-Control 属性值:

彻底缓存依赖 Cache-Control 字段,所以我们需要熟悉该字段的属性值,多个属性值用逗号隔开。

1. public			这些资源可以被任意对象缓存(如:客户端,代理服务器,等等)
2. private			这些资源只能在客户端缓存
3. max-age=xx		设置资源缓存的最大时间,超过时间表示缓存过期,请求会发到服务器(单位:秒)
4. no-cache			加载缓存资源前,强制发送请求到服务器进行“协商缓存”
5. no-store			不被做任何缓存
客户端浏览器缓存:
  • 客户端浏览器缓存分为:内存缓存(memory-cache)、硬盘缓存(disk-cache)

打开浏览器控制台,选择Network(网络),再刷新浏览器,我们就能看到请求资源详情:

在这里插入图片描述

一般频繁操作的文件都缓存在内存中,加载十分迅速。操作不频繁的文件就会缓存在硬盘中,加载速度也会较慢。

到底什么文件会缓存在内存中、什么会缓存在硬盘中,我们并不需要关心,让浏览器自己决定就行。我们只需要知道后面的请求可以直接走缓存,而不用请求服务器获取资源。其实就是博主也不明白😆,但好像确实不用深究(强行续命一秒钟😏),不过有明白的小伙伴欢迎留言。

协商缓存(Etag):

请求的资源通过资源标识与服务器协商比对,协商成功,服务器返回304状态码,浏览器从本地加载。协商缓存需要用到 Etag 字段 与 if-none-matchEtag 是 HTTP 响应头中的字段,Etag 的值是根据资源内容编码生成的一段字符串(资源标识),内容不同就会生成不同的Etag。你可能在网上看到还有 Last-modified ,了解即可。

再次发起请求时,请求头会带有 if-none-match 字段,值为上一次响应的 Etag(没有则不会携带)。服务器会将请求的资源生成资源标识与发送过来的值进行比对,比如果比对成功则返回 304 状态码,浏览器从本地加载该资源。

如果协商失败服务器会返回新的资源+新的Etag(资源标识)。

补充:如果不想命中协商缓存与彻底缓存,win系统可以直接 ctrl + f5ctrl+shift+r

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值