当前位置: 首页 > 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.lryc.cn/news/585995.html

相关文章:

  • 9.2 埃尔米特矩阵和酉矩阵
  • Pandas 模块之数据的读取
  • arcgis投影后数据显示问题记录
  • 非程序员如何用 AI 提升日常工作效率:以产品经理为例的落地实践指南
  • error while loading shared libraries
  • 小架构step系列12:单元测试
  • [爬虫实战] 多进程/多线程/协程-异步爬取豆瓣Top250
  • Pytest 跳过测试技巧:灵活控制哪些测试该跑、哪些该跳过
  • linux系统mysql性能优化
  • H2在springboot的单元测试中的应用
  • 多 Agent 强化学习实践指南(一):CTDE PPO 在合作捕食者-猎物游戏中的应用详解
  • 引入了模块但没有使用”,会不会被打包进去
  • 【C++小白逆袭】内存管理从崩溃到精通的秘籍
  • c++反射实现
  • 张量数值计算
  • 跨系统开发代码换行符如何解决
  • 每日一SQL 【销售分析 III】
  • 试用了10款翻译软件后,我只推荐这一款!完全免费还超好用
  • 大模型KV缓存量化误差补偿机制:提升推理效率的关键技术
  • Qt6中出现 OpenCV(4.10.0) Error: Assertion failed
  • 第10讲——一元函数积分学的几何应用
  • 创建 UIKit 项目教程
  • 在 Java 中,计算两个 Integer 类型表示的合格数量与总数量的合格率,并保留四位小数,推荐使用 BigDecimal 来确保精度
  • springboot+swagger2文档从swagger-bootstrap-ui更换为knife4j及文档接口参数不显示问题
  • 股票的k线
  • 从基础加热到智能生态跨越:艾芬达用创新重构行业价值边界!
  • 人工智能自动化编程:传统软件开发vs AI驱动开发对比分析
  • 【科研绘图系列】R语言绘制小提琴图
  • 【TGRS 2025】可变形交互注意力Deform-Interac-Att,即插即用,涨点神器!
  • 【八股消消乐】Kafka集群 full GC 解决方案