浏览器缓存是浏览器为提升页面加载速度、减少服务器压力和节省网络带宽,在本地存储资源(如 HTML、CSS、JS、图片等)的机制。其核心分为强缓存协商缓存,并涉及多种 HTTP 头字段和存储位置。以下是详细解析:


⚙️ 一、缓存分类与核心机制

1. 强缓存(本地缓存)
  • 原理:浏览器直接检查本地缓存的有效性,未过期则直接使用缓存,不发送请求到服务器。
  • 关键字段
    • Cache-Control(HTTP/1.1):
      • max-age=3600:缓存有效期(秒)。
      • public:资源可被浏览器和代理服务器(如 CDN)缓存。
      • private:仅浏览器可缓存,禁止代理服务器缓存。
      • no-cache:禁用强缓存,必须走协商缓存
      • no-store:完全禁止缓存(包括强缓存和协商缓存)。
    • Expires(HTTP/1.0):绝对过期时间(如 Expires: Wed, 21 Oct 2025 07:28:00 GMT),因依赖客户端时间可能失效,优先级低于 Cache-Control
  • 生效表现:HTTP 状态码 200 (from disk/memory cache)
2. 协商缓存(304 缓存)
  • 原理:强缓存失效后,浏览器携带缓存标识向服务器验证资源是否更新。未更新则返回 304,使用缓存;更新则返回新资源。
  • 关键字段
    • Last-Modified(响应头) + If-Modified-Since(请求头):
      • 服务器返回资源最后修改时间(如 Last-Modified: Mon, 10 Nov 2018 09:10:11 GMT)。
      • 浏览器下次请求时携带该时间(If-Modified-Since),服务器对比时间判断是否更新。
      • 缺点:精度仅到秒级,1 秒内多次修改可能误判。
    • ETag(响应头) + If-None-Match(请求头):
      • 服务器返回资源唯一标识(如哈希值,ETag: "d41d8cd98f00b204")。
      • 浏览器下次请求携带该标识(If-None-Match),服务器对比标识判断更新。
      • 优先级高于 Last-Modified,但生成 ETag 增加服务器开销。
  • 生效表现:HTTP 状态码 304 (Not Modified)

📍 二、缓存存储位置

浏览器缓存按存储位置分为四类,优先级依次下降:

  1. Service Worker 缓存
    • 开发者通过 JavaScript 控制,支持离线访问(PWA 核心),需 HTTPS 协议。
  2. Memory Cache(内存缓存)
    • 存储当前页面资源(如 CSS、JS),读取极快,关闭标签页即释放。
  3. Disk Cache(磁盘缓存)
    • 持久化存储大型资源(如图片、视频),根据 HTTP 头策略管理缓存,容量大但读取较慢。
  4. Push Cache(推送缓存)
    • HTTP/2 服务器推送的资源暂存区,会话级有效(约 5 分钟),使用优先级最低。

🔄 三、缓存完整流程

浏览器缓存过程如下(以首次请求为例):

  1. 首次请求资源

    • 浏览器无缓存,向服务器发送请求。
    • 服务器返回资源及缓存头(如 Cache-Control: max-age=3600, ETag: "xyz")。
    • 浏览器存储资源及标识到 Disk CacheMemory Cache
  2. 再次请求相同资源

    • Step 1:检查强缓存(Cache-Control/Expires):
      • 若未过期 → 直接使用缓存(状态码 200 (from cache))。
      • 若过期 → 进入协商缓存流程。
    • Step 2:协商缓存验证:
      • 浏览器携带 If-None-Match(ETag 值)或 If-Modified-Since(时间戳)向服务器发起请求。
      • 服务器对比标识:
        • 未更新 → 返回 304,浏览器使用缓存。
        • 已更新 → 返回 200 和新资源,更新本地缓存。

⚡️ 四、缓存策略最佳实践

  1. 静态资源(JS/CSS/图片)
    • 强缓存 + 文件名哈希(如 app.a1b2c3.css),更新后文件名变化自动失效缓存。
    • 示例:Cache-Control: public, max-age=31536000, immutable(一年内有效)。
  2. HTML 文件
    • 禁用强缓存(Cache-Control: no-cache),使用协商缓存(ETag),避免加载旧 HTML 导致资源更新失效。
  3. 动态 API 或敏感数据
    • 完全禁用缓存:Cache-Control: no-store

⚠️ 五、注意事项

  1. 刷新操作影响缓存
    • 普通刷新(F5):跳过强缓存,检查协商缓存。
    • 强制刷新(Ctrl+F5):忽略所有缓存,重新请求服务器。
  2. 缓存失效问题
    • 强缓存时间过长可能导致用户无法获取更新,可通过 URL 追加参数(如 ?t=20250805)或文件名哈希解决。

💎 总结:浏览器缓存核心要点

类型原理关键字段/标识特点
强缓存直接使用本地缓存,不请求服务器Cache-Control > Expires状态码 200 (from cache)
协商缓存向服务器验证缓存是否有效ETag > Last-Modified状态码 304 (Not Modified)
Memory Cache内存临时存储无特定字段,浏览器自动管理读取快,标签关闭即释放
Disk Cache硬盘持久化存储遵循 HTTP 缓存头策略容量大,支持跨会话复用

通过合理配置缓存策略,可显著提升网站性能。实际开发中,建议结合资源类型(静态/动态)和更新频率选择策略,并利用开发者工具(如 Chrome DevTools 的 Network 面板)调试缓存行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92426.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92426.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/92426.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识随记-----Qt 实用技巧:自定义倒计时按钮防止用户频繁点击

Qt 技巧:实现自定义倒计时按钮防止用户频繁点击注册 项目场景 在一个基于 Qt 开发的聊天应用中,用户注册时需要获取验证码。为防止用户频繁点击获取验证码按钮,需要实现一个倒计时功能,用户点击后按钮进入倒计时状态,倒…

Linux与Windows应急响应

本人首先进行了linux的应急响应,windows之后再进行 Linux与Windows应急响应初体验1 linux应急响应1.1 账户:1.1.1 使用cat /etc/passwd命令查看passwd文件2.1.2 使用cat /etc/shadow命令查找shadow文件,该文件为密码文件的存储项1.2 入侵排查…

计算机网络1-4:计算机网络的定义和分类

目录 计算机网络的定义 计算机网络的分类 计算机网络的定义 计算机网络的分类 按交换技术分类:电路交换网络、报文交换网络、分组交换网络 按使用者分类:公用网、专用网 按传输介质分类:有线网络、无线网络 按覆盖范围分类:…

在QT中动态添加/删除控件,伸缩因子该怎么处理

开发中遇到的问题[TOC](开发中遇到的问题)处理方式在我们的界面开发过程中,通常需要开发一些可以动态添加or删除控件的容器,类似Tab页一样,为了美观的话,我们通常使用伸缩因子将容器中的控件往一个方向挤,类似下面的控…

【设计模式精解】什么是代理模式?彻底理解静态代理和动态代理

目录 静态代理 动态代理 JDK动态代理 CGLIB代理 JDK动态代理和CGLIB代理的区别 总结 代理模式简单来说就是 我们使用代理对象来代替对真实对象(real object)的访问,这样就可以在不修改原目标对象的前提下,扩展目标对象的功能。 代理模式有静态代理…

MCU AI/ML - 弥合智能和嵌入式系统之间的差距

作者:芯科科技产品营销高级经理Gopinath Krishniah 人工智能(AI)和机器学习(ML)是使系统能够从数据中学习、进行推理并随着时间的推移提高性能的关键技术。这些技术通常用于大型数据中心和功能强大的GPU,但…

Redis中的sdshdr的len和alloc那块的知识点详解

文章目录核心比喻:一个可以伸缩的水瓶场景一:创建一个新字符串场景二:追加字符串(触发“空间预分配”)场景三:再次追加字符串(利用空闲空间)场景四:缩短字符串&#xff0…

在Linux下访问MS SQL Server数据库

Linux作为一个免费的Unix类操作系统,以其开放性源代码、多任务、X window等特点为众多的用户所采用,并有很多企业采用Linux来作为其内部网的全功能服务器(WWW,FTP,Email、DNS)。企业的内部网不仅要提供文本信息的访问,…

计算机视觉-OpenCV

一下载第三方库opencv-python3.4.18.65opencv-contrib-python3.4.18.65import cv2 # 读取的格式是BGR numpy import numpy as np# 读取图片 a cv2.imread(generated_image.jpg) # 读取图片 print(a) # NumPy数组,其中存储了读取的图像文件的像素值。cv2.imshow…

解决GitHub无法打开

找到下图文件,用记事本打开 在最下方粘贴如下代码140.82.113.4 github.com 20.205.243.166 github.com 140.82.112.4 github.com 151.101.1.6 github.global.ssl.fastly.net 185.199.108.153 assets-cdn.github.com 185.199.109.153 assets-cdn.github.com 185.199.…

AWS VPC Transit Gateway 可观测最佳实践

AWS VPC Transit Gateway 介绍 Amazon VPC Transit Gateway 是一个网络传输中心,用于互连虚拟私有云 (VPCs) 和本地网络。随着您的云基础设施在全球扩展,区域间对等互连使用 AWS 全球基础设施将中转网关连接在一起。 AWS 数据中心之间的所有网络流量都在…

WeakRef的作用和使用

文章目录WeakRef的作用和使用使用 WeakRef 避免强引用:原理与实践一、WeakRef 的核心特性二、WeakRef 与强引用的对比三、WeakRef 的使用场景与示例1. 非关键数据缓存(避免缓存导致内存泄漏)2. 跟踪对象生命周期(不干扰回收&#…

【华为机试】332. 重新安排行程

文章目录332. 重新安排行程题目描述示例 1:示例 2:提示:解题思路核心思路算法流程图欧拉路径原理DFS回溯机制字典序优化策略复杂度分析算法实现要点完整题解代码332. 重新安排行程 题目描述 给你一份航线列表 tickets ,其中 tic…

通信算法之300:CRC表生成方式-CRC8、CRC16、CRC32-输入字节

"CRC表的MATLAB生成代码"生成的查找表可以用于快速计算 CRC 值,通过查表法可以显著提高 CRC 计算效率,尤其适用于需要处理大量数据的场景。下面是一个生成 CRC 查找表(CRC Table)的 MATLAB 代码,该代码可以根…

国内使用 npm 时配置镜像源

在国内使用 npm 时,由于网络限制可能会遇到下载速度慢或连接超时的问题。通过设置国内镜像源,可以显著提升下载速度和稳定性。以下是常用的国内 npm 镜像源及其配置方法。 查询当前使用的镜像源 npm get registry 设置为淘宝镜像源 npm config set reg…

一篇文章入门TCP与UDP(保姆级别)

🐳第一部分:什么是TCP和UDP? 先给结论:TCP 和 UDP 都是传输层协议,负责把数据从一台电脑 “搬” 到另一台电脑,但它们的 “搬运风格” 完全不同 📦 比喻:TCP 像 "打电话"&#xff…

2024年测绘程序设计比赛--空间探索性分析(数据为2025年第三次模拟数据)

想要在2026年参加这个比赛的&#xff0c;可以加入小编和其它大佬所建的群242845175一起来备赛&#xff0c;为2026年的比赛打基础&#xff0c;也可以私信小编&#xff0c;为你答疑解惑一、读写文件 internal class Read {public static List<Point> pts new List<Poin…

力扣 hot100 Day68

84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 class Solution { public:int largestRectangleArea(vector<int>&…

生成式AI时代,Data+AI下一代数智平台建设指南

DataAI下一代数智平台建设指南一、生成式AI时代的五大数据挑战二、驱动DataAI平台建设的核心要素主动选择&#xff1a;构建竞争壁垒被动应对&#xff1a;解决现有痛点三、DataAI平台的六大关键能力四、腾讯云DataAI产品方案与实践1. 数据与AI协同层2. 开发与治理层3. 存储与计算…

FPGA学习笔记——SPI通讯协议简介

目录 一、SPI通讯协议简介 二、SPI物理层 三、SPI协议层 1.通讯模式 &#xff08;一&#xff09;模式零 &#xff08;二&#xff09;模式一 &#xff08;三&#xff09;模式二 &#xff08;四&#xff09;模式三 2.通讯流程 一、SPI通讯协议简介 SPI&#xff08;Seria…