浏览器缓存机制(二):HTTP缓存

简介: 浏览器缓存机制(二):HTTP缓存

前言

HTTP 缓存是产生于客户端与服务器之间通信的一种缓存,利用这一缓存可以提升服务器资源的重复利用率,在有效的时间内不必每次都向服务器请求相同的资源,大大减少服务器的压力。

HTTP 缓存按照失效策略划分可以分为:

  • 强缓存
  • 协商缓存

网络异常,图片无法展示
|

强缓存

强缓存涉及到两个首部字段名:Expires(实体首部字段) 和 Cache-Control(通用首部字段)。

强缓存的实现过程:

  1. 浏览器首次请求资源,服务器返回响应时,在 Response Headers 中将过期时间(相对于服务器的时间)写入 expires 字段
  2. 浏览器再次请求资源时,浏览器会对比本地时间与expires的时间,如果未过期就直接使用缓存,不再向后端发起请求

由于Expires是一个绝对时间,是一个时间戳,如果服务器和浏览器之间存在时差,那么就会判定失误,因此在HTTP 1.1 引入了Cache-Control字段。该字段有四个值:

max-age

max-age是一个相对时间,是一个时间长度,以客户端请求到此资源的时间为起点,从而规避时间差的问题。

如果同时设置了expirescache-control:max-age=xxx,那么以后者为主,后者优先级更高。

public/private

默认是private,但是public在很多情况下不需要手动设置。

  • public表示代理服务器可以缓存资源
  • private表示只有客户端可以缓存资源,设置了private之后s-maxage会被忽略

s-maxage

s-maxage 就是用于表示 cache 服务器上(比如 cache CDN)的缓存的有效时间的,并只对 public 缓存有效。

no-cache/no-store

  • no-store表示不使用任何缓存策略
  • no-cache表示客户端/代理服务器可以缓存,但是使用缓存前必须问下服务端,也就是走协商缓存

优先级较高的是强缓存,在命中强缓存失败的情况下,才会走协商缓存。

协商缓存

协商缓存一共涉及到四个首部字段名:

  • 实体首部字段Last-Modified
  • 响应首部字段:ETag
  • 两个请求首部字段:If-Modified-SinceIf-Non-Match

协商缓存的实现过程:

  • 浏览器首次发起请求,服务端返回Last-Modified字段
  • 浏览器以后每次发起请求,都会携带If-Modified-Since(值对应服务端返回Last-Modified字段),如果资源无变更,服务端就会返回304 Not Modified,表示重定向到浏览器缓存

为了更准确的感知资源的变化,出现了ETagIf-Non-Match。Etag 是由服务器为每个资源生成的唯一的标识字符串

服务端返回ETag字段,浏览器进行保存,If-Non-Match的值就对应ETag的值。

当 Etag 和 Last-Modified 同时存在时,以 Etag 为准。

chrome三种加载模式与 HTTP 缓存间的关系

Chrome 具备三种加载模式,开启开发者工具时在浏览器 左上角刷新按钮上右键鼠标可以进行操作。

1.正常重新加载

这种就是普通的刷新页面,会去读取缓存

2.硬性重新加载

效果类似于在开发者工具Network面板勾选了Disabled cache选项。使用硬性重新加载后所有资源的请求首部都会被加上cache-control:no-cachepragma: no-cache属性,表示不直接使用缓存,要求向源服务器发起请求, pragma 则是为了兼容 HTTP/1.0。

3.清空缓存并硬性重新加载

这个模式就相当于先清空缓存,再重新向服务器发送请求。同时其影响的并不是当前网站,所有访问过的网站缓存都将被清除。


相关文章
|
5天前
|
缓存 监控 前端开发
基于时间缓存优化浏览器轮询阻塞问题
基于时间缓存优化浏览器轮询阻塞问题
16 0
|
4月前
|
存储 缓存 前端开发
HTTP的缓存机制是什么?
HTTP的缓存机制是什么?
28 1
|
8天前
|
缓存 Linux
linux系统缓存机制
linux系统缓存机制
|
16天前
|
缓存 数据库 开发者
Django视图中的缓存机制:提升页面加载速度
【4月更文挑战第15天】本文介绍了Django的缓存机制在提升页面加载速度中的作用。Django提供视图缓存和片段缓存,通过`cache_page`装饰器和`CacheMixin`实现视图级别的缓存,使用`{% cache %}`模板标签实现页面片段缓存。开发者可选择不同的缓存后端,并在设置中配置缓存参数。同时,注意合理控制缓存粒度、及时更新和管理缓存,以优化用户体验和网站性能。
|
19天前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
55 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景
|
2月前
|
存储 缓存 算法
深入探究LRU缓存机制:优化内存利用与提升性能
深入探究LRU缓存机制:优化内存利用与提升性能
159 1
|
2月前
|
存储 缓存 Java
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
什么!?实战项目竟然撞到阿里面试的原题!???关于MyBatis Plus的缓存机制
|
2月前
|
Web App开发 缓存 JSON
|
3月前
|
缓存 网络协议 前端开发
浏览器访问缓存都发生了什么
浏览器访问缓存都发生了什么
|
4月前
|
Shell Unix Linux
Linux 终端命令之文件浏览(3) less
Linux 终端命令之文件浏览(3) less
32 0
Linux 终端命令之文件浏览(3) less