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

WHAT - 浏览器缓存机制系列(二)强缓存、协商缓存和启发式缓存

目录

  • 一、介绍
  • 二、强缓存
  • 三、协商缓存
  • 三、html & js 缓存策略
  • 四、启发式缓存
    • 启发式缓存什么时候发生
    • 浏览器的推算规则
    • 如果没有 Last-Modified
    • DevTools 里怎么看出是启发式缓存
    • 启发式缓存的风险
      • 1. 浏览器行为不一致
      • 2. 更新不可控
      • 3. CDN 行为不同
    • 总结

今天主要介绍 HTTP请求缓存中的强缓存和协商缓存。

一、介绍

浏览器每次发起请求时,会先在浏览器缓存中查找请求的缓存结果和缓存标识。

当浏览器第一次向服务器发起请求后,浏览器缓存肯定是没有对应缓存的,所以向服务器发起请求,服务器响应该请求,并返回请求结果和缓存规则,浏览器拿到响应后,将请求结果和缓存标识存入浏览器缓存。浏览器在后续加载对应资源时会根据第一次请求资源时返回的缓存标识来确定缓存规则。

二、强缓存

根据是否超出某个时间来决定是否从缓存获取数据,不关心服务器文件是否已经更新。

在 chrome 控制台的 Network 选项中可以看到有的请求 Size 显示from disk cachefrom memory cache,这就是设置了强缓存的结果。

要想实现强缓存可以通过设置 HTTP Header 中的ExpiresCache-Control

  1. Expires

Expires字段是一个HTTP响应头,它指定了资源的到期时间,以GMT格式的日期/时间表示。浏览器会将该时间与客户端的本地时间进行比较,以确定资源是否过期。如果资源的到期时间早于当前时间,浏览器将从服务器重新获取该资源。

示例:

Expires: Thu, 01 Dec 2022 16:00:00 GMT

在上面的示例中,资源的到期时间被设置为2022年12月1日下午4点(GMT时间)。

但是,Expires存在一些问题:

(1)时区问题: Expires头使用的是 GMT 格林尼治标准时间,可能导致时区差异而产生问题。
(2)精度问题: Expires头只能指定到秒级别的精度,而现代浏览器和服务器通常需要提供更高精度的缓存控制。
(3)与 Cache-Control 冲突:如果同时使用了Cache-Control和Expires头,Cache-Control的优先级更高。

因此,现代Web开发更倾向于使用Cache-Control头来控制缓存,因为它更灵活、精确,并且不容易出现时区等问题。在实际开发中,你可以只使用Cache-Control头来设置缓存策略,而不使用Expires头。接下来我们这就介绍Cache-Control。

  1. Cache-Control:public|private|no-store|no-cache|max-age

在 HTTP/1.1 中,Cache-Control 是最重要的规则。Cache-Control 是一种更为灵活的方式来设置缓存策略。它可以指定资源的到期时

http://www.jsqmd.com/news/478589/

相关文章:

  • CausalML高级技巧:特征选择与因果效应异质性分析
  • ROS以及工控机环境配置
  • Gorilla技术播客系列:与AI先驱探讨函数调用的未来
  • 去毛刺机设计(机械毕业设计)
  • 为什么我的电脑不能升级Windows 11?终极兼容性检测工具深度解析
  • OCRmyPDF内存优化:处理大型PDF文件的内存管理技巧
  • Leetcode_155. 最小栈
  • 软考中级--数据库系统工程师 备考建议和考试注意事项
  • 电脑CPU速度很快,为什么3dMax还会出现卡顿的情况?
  • 牛客_JZ31 栈的压入、弹出序列
  • Slurm高级特性详解:QoS、资源限制与作业优先级配置指南
  • Gorilla网络安全应用:威胁检测API集成与响应自动化完整指南
  • Leetcode_43. 字符串相乘
  • 【C++BFS】690. 员工的重要性
  • 【AutoSAR】只讲干货!使用EB Tresos配置Port
  • 终极指南:Upspin核心架构完全解析——三大服务如何构建全球命名系统
  • 【亲测免费】推荐项目:Dubbo Spring Boot Starter - 简化你的微服务开发
  • 从XML到JSON:Proteus如何革命性重构Android动态布局开发
  • 【亲测免费】 推荐使用:KCloud-Platform-IoT - 超强微服务架构的物联网云平台
  • SpringBoot集成RestTemplate请求高德地图API
  • PyCaret批量预测:处理大规模推理任务的终极指南
  • 排序——快速排序
  • MessagePack-CSharp未来发展方向:终极路线图与功能规划指南
  • 10个终极API安全测试技巧:awesome-web-hacking实战指南
  • 如何使用IPED进行文件类型统计趋势分析:掌握数字证据随时间变化的关键技巧
  • Python枚举类型完全指南:从入门到精通的10个实用技巧
  • 掌握mmdetection模型剪枝技术:通道剪枝与结构剪枝完整指南
  • vue3横向滚动日期选择器组件(Element Plus)
  • 空间函数在 ABAP SQL 里到底是什么
  • 【JEECG】JVxeTable表格行样式错位、底部滚动条错位