浅谈浏览器的缓存机制

简介: 浏览器是有缓存的,做开发的同学都知道浏览器缓存是非常蛋疼的问题,特别是前端开发的同学,明明改了为什么还没有生效,经常要去清理浏览器的缓存,或者禁用浏览器的缓存功能。

浏览器是有缓存的,做开发的同学都知道浏览器缓存是非常蛋疼的问题,特别是前端开发的同学,明明改了为什么还没有生效,经常要去清理浏览器的缓存,或者禁用浏览器的缓存功能。

我们知道在浏览器中按F5是刷新页面,CTRL+F5是强制刷新页面,这两个有什么区别呢?

F5刷新会使用浏览器的缓存。

CTRL+F5刷新是不会使用缓存的,每次请求都会请求服务器的最新资源,它的原理就是在请求头上加上一些参数告诉服务器要获取最新的资源。

当使用普通刷新时,浏览器在请求之前会检查Expires这个值,如果Expires时间小于当前时间说明缓存已经失效,重新发起获取资源。

另外,还有一个参数Last-Modified,即服务器返回的最后的修改时间,浏览器在请求时会带上If-Modified-Since这个值,服务器判断Last-Modified与If-Modified-Since是否一致,如果一致则告诉浏览器是最新的,服务器不返回新的资源。

与Last-Modified功能类似的还有一个参数:Etag,即让服务器给每个页面分配一个唯一编号,然后可以通过这个编号来确定页面是不是最新的,这个使用较少,这里不再详述。

上面为强制刷新的情况,浏览器在请求头做了以下设置:

Cache-control: no-cache

Pragma: no-cache

即表示不使用本地的缓存直接向服务器重新获取资源。

下面是关于Cache-control的参数定义:

public所有内容都将被缓存,客户端和代理服务器都可缓存

private内容只缓存到私有缓存中,仅客户端可以缓存,代理服务器不可缓存

no-cache必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。

no-store所有内容都不会被缓存到缓存或 Internet 临时文件中

must-revalidation/

proxy-revalidation如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证

max-age缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高

Cache-control这个参数在所有浏览器中兼容性很好,而且它的优先级也比较高,和其他像Expires同时使用时会覆盖其他的字段,Pragma作用与Cache-control类似,最常用使用的是Pragma: no-cache和Cache-control结合使用告诉服务器不要使用缓存。

相关文章
|
4月前
|
存储 缓存 前端开发
HTTP的缓存机制是什么?
HTTP的缓存机制是什么?
33 1
|
4天前
|
存储 缓存 运维
【Docker 专栏】Docker 镜像的分层存储与缓存机制
【5月更文挑战第8天】Docker 镜像采用分层存储,减少空间占用并提升构建效率。每个镜像由多个层组成,共享基础层(如 Ubuntu)和应用层。缓存机制加速构建和运行,通过检查已有层来避免重复操作。有效管理缓存,如清理无用缓存和控制大小,可优化性能。分层和缓存带来资源高效利用、快速构建和灵活管理,但也面临缓存失效和层管理挑战。理解这一机制对开发者和运维至关重要。
【Docker 专栏】Docker 镜像的分层存储与缓存机制
|
4月前
|
存储 消息中间件 缓存
redis的缓存机制
redis的缓存机制
100 0
|
9天前
|
缓存 NoSQL Java
17:缓存机制-Java Spring
17:缓存机制-Java Spring
23 5
|
10天前
|
存储 缓存 自然语言处理
深入PHP内核:探索Opcode缓存机制
【5月更文挑战第1天】 在动态语言如PHP的执行过程中,每次脚本被请求时都需要经过一系列复杂的解析和编译步骤。为了优化这一过程并提高性能,PHP引入了Opcode缓存机制。本文将详细探讨Opcode的概念、作用以及它如何显著提升PHP应用的执行效率。我们将从缓存原理出发,分析几种常见的Opcode缓存工具,并通过实例说明如何在实际项目中实现和优化缓存策略。
|
12天前
|
缓存 NoSQL PHP
【PHP开发专栏】PHP缓存机制与实现
【4月更文挑战第29天】本文介绍了PHP缓存的基本概念、策略及实现方式。PHP缓存包括应用缓存、Web服务器缓存、数据库缓存和分布式缓存,常见策略有缓存预热、更新和懒加载。PHP的缓存实现包括文件缓存、APC、OPcache、Memcached和Redis。最佳实践包括缓存热点数据、控制粒度、设置失效策略、保证一致性和确保安全性。文中还提供了一个新闻列表和详情页的缓存实战示例,帮助开发者理解如何在实际项目中应用缓存。
|
18天前
|
缓存 流计算
缓存命中率和过期机制的一般思路
【4月更文挑战第20天】缓存命中率是评估缓存效果的关键,目标是达到90%以上,但某些频繁的小请求场景可能无法实现。过期机制可采用定时删除(精确但开销大)、延迟队列(精确但有队列开销)、懒惰删除(简单但时间不精确)或定期删除(简单但性能损耗不可控)。
19 4
|
18天前
|
缓存 Linux
linux系统缓存机制
linux系统缓存机制
|
26天前
|
缓存 数据库 开发者
Django视图中的缓存机制:提升页面加载速度
【4月更文挑战第15天】本文介绍了Django的缓存机制在提升页面加载速度中的作用。Django提供视图缓存和片段缓存,通过`cache_page`装饰器和`CacheMixin`实现视图级别的缓存,使用`{% cache %}`模板标签实现页面片段缓存。开发者可选择不同的缓存后端,并在设置中配置缓存参数。同时,注意合理控制缓存粒度、及时更新和管理缓存,以优化用户体验和网站性能。
|
29天前
|
XML 缓存 Java
MyBatis二级缓存解密:深入探究缓存机制与应用场景
MyBatis二级缓存解密:深入探究缓存机制与应用场景
67 2
MyBatis二级缓存解密:深入探究缓存机制与应用场景