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

14. 请谈一下浏览器的强缓存和协商缓存

总结

  1. 强缓存:响应头 cache-control: max-age=2592000
  2. 协商缓存:状态码 304,响应头 Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
  3. 区别:强缓存 1.0 是 expres,1.1 是 cache-control。协商缓存 last-modified

请谈一下浏览器的强缓存和协商缓存

引言

浏览器缓存机制是提高页面加载速度和减少服务器压力的重要手段。根据是否直接使用本地缓存而不向服务器发送请求,可以将缓存分为 强缓存协商缓存

强缓存(Strong Caching)

定义

强缓存是指浏览器在没有重新请求资源的情况下直接使用本地缓存。只要缓存未过期,就直接从本地读取资源,不会与服务器进行通信。

响应头字段

  • Cache-Control: HTTP/1.1 标准中的缓存控制字段。
    • max-age=秒数:设置缓存的最大有效时间。
    • no-cache:不使用强缓存,但可以使用协商缓存。
    • no-store:不缓存任何内容,每次都要请求服务器。
  • Expires: HTTP/1.0 标准中的缓存过期时间,表示资源失效的具体时间。

示例

Cache-Control: max-age=2592000

特点

  • 不需要与服务器交互,响应速度快。
  • 如果缓存期间服务器资源发生变化,用户可能看到的是旧版本。

协商缓存(Negotiated Caching)

定义

协商缓存是指浏览器在使用缓存前会向服务器发起请求以验证缓存是否仍然有效。如果服务器确认缓存有效,则返回状态码 304 Not Modified,否则返回新的资源。

请求/响应头字段

  • If-Modified-Since / Last-Modified
    • 浏览器发送 If-Modified-Since 头,值为上次响应的 Last-Modified 时间。
    • 服务器比对时间,若资源未修改则返回 304
  • If-None-Match / ETag
    • 浏览器发送 If-None-Match 头,值为上次响应的 ETag
    • 服务器比对 ETag,若一致则返回 304

示例

Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT
ETag: "abc123"

特点

  • 每次使用缓存时都需要与服务器通信,确保获取最新资源。
  • 相对于强缓存更可靠,但性能略低。

强缓存 vs 协商缓存对比

特性强缓存协商缓存
是否与服务器通信
使用场景资源长期不变或容忍一定延迟更新资源频繁变动或需精确控制更新
状态码200(from disk cache / memory cache)304 Not Modified
主要字段Cache-Control / ExpiresLast-Modified / ETag

缓存策略建议

  • 对于静态资源(如图片、CSS、JS 文件),推荐使用 Cache-Control: max-age 进行强缓存。
  • 对于动态资源或频繁更新的内容,可结合 ETagLast-Modified 使用协商缓存。
  • 可通过组合使用 Cache-ControlETag 实现灵活的缓存控制。

http://www.xdnf.cn/news/1106875.html

相关文章:

  • 基于大模型的鼻咽癌全周期预测及诊疗优化研究报告
  • YOLO家族内战!v5/v8/v10谁才是你的真命天子?(附保姆级选择指南)
  • 推荐系统-数据分割、性能验证
  • 开源 python 应用 开发(五)python opencv之目标检测
  • (LeetCode 面试经典 150 题 ) 209. 长度最小的子数组(双指针)
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 华为IPD(集成产品开发)流程是其研发管理的核心体系
  • pdf合并
  • 基于Java的Markdown到Word文档转换工具的实现
  • 解决‘vue‘ 不是内部或外部命令,也不是可运行的程序
  • css 判断是ios设备 是Safari浏览器
  • el-tree 懒加载 loadNode
  • 柯里化入门:拆拆拆,拆出函数式编程的优雅
  • OSPFv3-一二类LSA
  • Qt:QCustomPlot类介绍
  • Qt窗口:菜单栏
  • 【攻防实战】记一次DC2攻防实战
  • 华为 GaussDB :技术特性、应用局限与市场争议
  • Java使用Langchai4j接入AI大模型的简单使用(二)
  • windows电脑远程win系统服务器上的wsl2
  • OneCode 3.0架构升级:注解驱动与开放接口生态详解
  • 数据结构栈的实现(C语言)
  • 《Java Web程序设计》实验报告五 Java Script学习汇报
  • MS Azure Eventhub 发送 AD log 到cribl
  • 李宏毅(Deep Learning)--(三)
  • Raft 代码分析
  • 人工智能之数学基础:多元逻辑回归算法的矩阵参数求导
  • stack和queue的使用和模拟实现以及了解deque
  • Java基础:泛型
  • 以数据为核心,以业务为导向,漫谈数据可视化应用