HTTP 缓存分为强缓存和协商缓存.

HTTP 缓存控制机制

  • HTML Meta 标记
// 当前页面不缓存, 每次访问都去服务器拉取. 只有部分浏览器支持.
  • HTTP 头信息

HTTP 头信息

强缓存 (200 from cache)

判断的字段: expire 或 cache-control

  • expire [http 1.0 的标准],  存储的是过期的具体时间
  • cache-control  [http 1.1 的标准]  max-age 值是过期的秒. max-age  最大值不能超过1年. 秒为单位. 优先级高, 以它的结果为准.

由于具体时间没有转换到正确的时区有可能造成错误. 所以倾向于使用 cache-control: max-age

如果强缓存没有命中的话, 则进入协商缓存

协商缓存  (304 or 200)

判断的字段: last-modified 或 Etag

last-modified/If-Modified-Since

  1. 浏览器第一次请求数据之后,服务端在 Response Headers 会带上 Last-modified (服务端资源最后修改时间).

  1. 再次请求时, 请求头会带上 If-Modified-Since 去跟服务器资源的最后修改时间对比. 如果修改, 返回 200 , 否则返回 304 .

Etag/If-None-Match

  1. 第一次请求数据的时候, Response Headers 带上 ETag . (Etag 由服务端生成一段 hash 字段)
  2. 之后的请求带上 If-None-Match: 原Etag 的值.

last-modified 和 Etag 区别

  • 有些服务无法精确的得到资源最后修改时间.
  • last-modified 只能精确到秒.
  • 一些资源的最后修改时间改变了,但是内容没改变,使用 Last-modified 看不出内容没有改变。
  • Etag 的精度比 Last-modified 高,属于强验证. 优先级高

last-modified 和 Etag 优先级

先判断 Etag, 再判断 last-modified. 但是结果会由服务器决策.

一张图总结流程:

Service Worker 缓存

浏览器的请求过程

我们可以在 Chrome 的开发者工具中,Network -> Size 一列看到一个请求最终的处理方式:如果是大小 (多少 K, 多少 M 等) 就表示是网络请求,否则会列出 from memory cache, from disk cache 和 from ServiceWorker。一个请求在查找资源的过程中经过的缓存顺序

  • Service Worker、
  • Memory Cache(内存)
    • 像一些 prefetch 资源也会暂存在内存中.
  • HTTP Cache/Disk Cache (硬盘上的缓存)
  • Push Cache

一般资源会存入内存. 如果内存不够, 会释放一些.

  1. 首次请求

走网络请求

  1. 再次请求 (F5)

三个请求都来自 memory cache。因为我们没有关闭 TAB,所以浏览器把缓存的应用加到了 memory cache。(耗时 0ms,也就是 1ms 以内)

  1. 关闭 TAB,打开新 TAB 并再次请求因为关闭了 TAB,memory cache 也随之清空。但是 disk cache 是持久的,于是所有资源来自 disk cache。(大约耗时 3ms,因为文件有点小) 而且对比 2 和 3,很明显看到 memory cache 还是比 disk cache 快得多的。

用户行为与浏览器缓存

  • F5 刷新, 内存不见, 协商缓存依然存在
  • 强制刷新/控制台强制清除缓存  内存不见, 协商缓存也存在
  • 地址栏访问, 回车, 前进后退. 缓存都不在.

缓存日常实践

  1. 永久缓存:  带 hash 值的静态 js, css资源永久缓存. cache-control : max-age=3153600  一年过期时间

  2. 对 index.html 使用 Cache-Control: no-cache

幸运的是,关于协商缓存你无需管理,无需配置, nginx 或者一些 OSS 都会自动配置协商缓存,而对于协商缓存,也有它们自己的算法。协商缓存背后是基于 Last-Modified/ETag。浏览器每次请求资源时,会携带上次服务器响应的 ETag/Last-Modified 作为标志,与服务端此时的 ETag/Last-Modified 作比较,来判断内容更改。

关注「前端加加」, 第一时间获取优质文章. 

nginx强制刷新用户缓存_HTTP 缓存相关推荐

  1. mac chrome 浏览器强制刷新,清除浏览器缓存

    mac 强制刷新:command+shift+r mac 普通刷新:command+r windows 强制刷新:ctrl+f5 windows 刷新:f5 mac 开发者模式:option(alt) ...

  2. 深入分布式缓存_HTTP缓存的深入介绍:探索风景

    深入分布式缓存 可以缓存我 (Cache Me If You Can) About 2 years ago, I remember witnessing a reunion that had a pr ...

  3. Chrome浏览器如何强制刷新页面(不使用缓存)?

    在Chrome浏览器中按下F5或 Ctrl+F5 都没用,Chrome总是会强制使用页面缓存进行刷新,如何不使用页面缓存进行刷新? Chrome官方推荐使用如下快捷键,就可以不使用页面缓存进行刷新 W ...

  4. 微信浏览器强制刷新方法怎么清空缓存

    在微信发一个消息,内容为这个网址 debugx5.qq.com 然后打开,打勾清空文件缓存.如下图

  5. 小技巧:强制刷新,避免浏览器缓存快捷键

    IE中,快捷键是CTLR+F5. Firefox中,快捷键是CTLR+SHIFT+R.

  6. spring http缓存_HTTP缓存与Spring示例

    spring http缓存 缓存是HTTP协议的强大功能,但由于某些原因,它主要用于静态资源,例如图像,CSS样式表或JavaScript文件. 但是,HTTP缓存不仅限于应用程序的资产,因为您还可以 ...

  7. Chrome浏览器强制刷新

    在Chrome浏览器中按Ctrl+F5进行强制刷新,或者Ctrl+点击刷新,或者Ctrl+shift+R. Chrome浏览器会自动缓存页面信息,而强制刷新就是清楚页面缓存.

  8. nginx 部署前端项目,不缓存html文件,项目发版后,不用手动刷新页面

    nginx 部署前端项目,不缓存html文件,项目发版后,不用手动刷新页面 location / {expires 1h;root /home/test/vue/dist/;index index.h ...

  9. Tip: 强制 Outlook 用户使用缓存模式

    能否强制 Outlook 用户使用缓存模式 =========================== 可以.我们可以使用cmdlet Set-CASMailbox 来控制POP,MAPI,IMAP,EA ...

最新文章

  1. TCP/IP协议各层首部汇总
  2. UNDO Tablespace
  3. 多媒体计算机组装过程,多媒体技术及《计算机组装及维护》课精彩结合.doc
  4. winform开发框架介绍
  5. 一次 注册dll失败 的经历
  6. 迅雷下gho文件变成php,GHO格式文件转换成WIM格式文件
  7. 【转载】秦九韶算法 Horner算法
  8. 高并发解决方案——提升高并发量服务器性能解决思路
  9. 微信小程序直接引用外部地图(腾讯地图、高德地图导航)附代码!!
  10. 计算机房间的英语,酒店客房状态常用英语
  11. Epoll的本质(内部实现原理)
  12. [iPhone-APP]手机归属地查询软件
  13. 当当悲喜交加的19年
  14. 【LeetCode】606.根据二叉树创建字符串
  15. pdf转换软件在线转换
  16. 3d Max 一些操作技巧
  17. excel文件.xlsx操作 openpyxl 笔记
  18. 若依 ruoyi 配置多数据源 生成代码 导出代码
  19. 微机实验2 ——简单并行接口实验
  20. python输入三个整数_#python输入一个序列,其中包含表示年,月,日的三个整数,判断这个日期是当年的第几?#...

热门文章

  1. Java中IDEA,Springboot实现手机获取验证码和倒计时
  2. 项目经验少的怎么社招_想创业,但资金少,不知如何找项目?看看这些经验,你就知道了...
  3. python内存数据库触发器_Python内存数据库/引擎
  4. vscode中前端vue项目详解_web前端Vue项目实战-Music
  5. python 将多张大小不同的图依次放入较大的黑色背景_用户消费行为分析(Python)...
  6. Mysql索引查询失效的情况
  7. 初学python之路-day11
  8. 2018年5大微服务发展趋势
  9. SpringMVC自定义配置消息转换器踩坑总结
  10. iOS 细碎知识整理