那些年少的伤寂静微凉 2023-03-13 15:55 采纳率: 0%
浏览 16

HTTP 强缓存cache-contrl:max-age的问题

都知道HTTP1.1后强缓存利用cache-contrl:max-age控制,为了解决之前expires的误差问题,但今天突然在想,max-age是一个相对的最大过期时间,也就是从拿到资源过去了多少秒,那么问题来了,用户会关闭浏览器,也会关闭电脑,那再次访问的时候,客户端怎么知道缓存资源已经过去了多少秒?按原理分析,要计算具体过去了多少秒肯定需要设置计时器,那这个计时器在哪执行呢,因为浏览器是会关闭的,关闭后浏览器的所有线程进程就都释放了,怎么持续计算过去过久时间,包括电脑也会有被关闭的时候,那这个计时器在哪里一直执行着呢?

  • 写回答

2条回答 默认 最新

  • MarkHan_ 2023-03-13 16:19
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    您的疑惑是关于在客户端如何计算缓存资源的过期时间。事实上,浏览器并不需要一直计时来判断缓存是否过期,而是在响应报文中的 Cache-Control 头部指定的 max-age 参数为基础上,使用当前的时间戳与资源的过期时间戳进行比较来判断是否需要使用缓存。
    ·
    当浏览器第一次请求资源时,服务器会将资源的过期时间戳作为响应报文的 Cache-Control 头部中的 max-age 参数返回给浏览器。浏览器缓存这个响应,以后再请求同一个资源时,会从缓存中读取这个响应,并将响应中的 max-age 与当前的时间戳进行比较,如果 max-age 小于当前时间戳与资源的 Last-Modified 时间的差值,说明缓存过期了,需要重新请求资源,否则可以直接使用缓存。
    ·
    因此,浏览器并不需要一直计时,而是在读取缓存时根据缓存中保存的过期时间戳和当前时间戳进行比较来判断是否过期。当用户关闭浏览器或电脑时,计时器会停止,但是下次用户再打开浏览器并请求资源时,浏览器仍然可以通过上述方式来判断缓存是否过期。
    ·
    需要注意的是,由于客户端时间可能与服务器时间存在误差,因此浏览器在判断缓存是否过期时会留有一定的容错时间,一般是几分钟到几小时不等。如果您需要更精确地控制缓存过期时间,可以考虑使用其他机制,如使用 Last-Modified 和 ETag 标头,或者使用服务端控制缓存过期的方式。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月13日

悬赏问题

  • ¥15 请问用arcgis处理一些数据和图形,通常里面有一个根据点划泰森多边形的命令,直接划的弊端是只能执行一个完整的边界,但是我们有时候会用到需要在有很多边界内利用点来执行划泰森多边形的命令
  • ¥30 在wave2foam中执行setWaveField时遇到了如下的浮点异常问题,请问该如何解决呢?
  • ¥20 看图片)删除这个自动化录屏脚本就一直报错找不到脚本文件,如何解决?(相关搜索:bat文件)
  • ¥750 关于一道数论方面的问题,求解答!(关键词-数学方法)
  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?