当前位置: 首页 > 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.dtcms.com/a/275565.html

相关文章:

  • Django母婴商城项目实践(四)
  • 算法魅力-BFS解决最短路问题
  • 鸿蒙开发竖的线
  • Typecho集成PHPMailer实现邮件订阅功能完整指南
  • 如何查看服务器当前用户的权限
  • Windows X64环境下mysql5.6.51安装指南
  • 联邦学习客户端异构数据特征对齐:挑战、方法与应用
  • 如何防范金融系统中的SQL注入攻击
  • QWidget的属性
  • Java设计模式实战:备忘录模式与状态机模式的“状态管理”双雄
  • 基于MCP的CI/CD流水线:自动化部署到云平台的实践
  • 英语单词学习系统
  • 周末总结(2024/07/12)
  • 13. https 是绝对安全的吗
  • 代码审计-Struts2漏洞分析
  • 从LLM到VLM:视觉语言模型的核心技术与Python实现
  • React 组件中怎么做事件代理?它的原理是什么?
  • html-初级标签
  • JAX study notes[17]
  • Java从入门到精通!第四天(面向对象(一))
  • Unity VR手术模拟系统架构分析与数据流设计
  • 【设计模式】装饰(器)模式 透明装饰模式与半透明装饰模式
  • 前端MQTT入门指南:从零到实战的完整流程
  • Google浏览器【无法安装扩展程序,因为它使用了不受支持的清单版本】解决方案
  • 【FreeRTOS】信号量
  • 自助KTV选址指南与优化策略
  • 刘火良 FreeRTOS内核实现与应用之5——补充知识(宏)
  • [Python] -实用技巧篇1-用一行Python代码搞定日常任务
  • Effective Modern C++ 条款9:优先考虑别名声明而非typedef
  • C++法则21:避免将#include放在命名空间内部。