• 对强缓存和协商缓存的理解


    缓存是指代理服务器或客户端磁盘内保存的资源副本。利用缓存可减少对服务器的访问,因此也就节省了通信流量和通信时间。
    浏览器缓存是为了节约资源,并且可以加速浏览网站的速度,当用户第一次访问网页的时候,浏览器在用户磁盘上对请求的文档进行保存,当第二次访问的时候,就会从本地直接显示,从而提高了页面的访问速度。
    浏览器缓存的优点:

    1. 减少了冗余的数据传输,节省了网费;
    2. 减少了服务器的负担,大大提升网站的性能;
    3. 加快客户端加载网页的速度;

    浏览器缓存分为强缓存协商缓存

    • 浏览器进行资源请求时,会判断请求头是否命中强缓存,如果命中,直接从本地读取缓存,不会向服务器发送请求。
    • 当强缓存没有命中时,会发送请求到服务端,判断协商缓存是否命中,如果命中,服务器将请求返回,不会返回资源,告诉浏览器从本地读取缓存;如果不命中,则服务器直接返回资源。

    区别:
    强缓存命中,不会请求服务器,直接请求缓存;协商缓存命中,会请求服务器,不会返回内容,然后读取缓存。

    from memory cache 和 from disk cache 的区别:

    from memory cache:字面理解是从内存中,这个资源是直接从内存中拿到的,不会请求服务器,一般是已经加载过该资源且缓存在了内存中,当关闭该页面时,该资源就被内存释放掉了,再次重新打开相同页面是,不会出现 from memory cache 的情况。
    from disk cache:这个资源是从磁盘当中取出的,也是在之前的某个时间加载过该资源,不会请求服务器,但是此资源不会随着该页面的关闭关闭而释放掉,因为此资源是存在硬盘中的,下次打开仍会from disk cache。

    一、强缓存

    强缓存,利用HTTP的返回头中的expires和cache-control两个字段来控制,用来表示资源的缓存时间(缓存的有效期)。
    这种方法会有一个固定时间,但是如果服务器数据进行了更新,而强缓存的有效期还没有过期的话,则数据无法更新。

    Expires

    该字段是http1.0时的规范,它的值是GMT格式的绝对时间,浏览器进行第一次请求时,服务器会在返回头部加上Expires,下次请求,如果在这个时间之前就命中缓存。

    Cache-Control

    该值是利用max-age判断缓存的生命周期,是以秒为单位,如果在生命周期时间内,则命中缓存。

    二、协商缓存

    协商缓存,由服务器来确定缓存资源是否可用,所以客户端与服务端要通过某种标识来进行通信,从而让服务器判断请求资源是否可以缓存访问。
    利用 Last-Modified,If-Modified-Since 和 ETag,If-None-Match 来实现。

    Last-Modified,If-Modified-Since

    Last-Modified:表示为实体头部部分,response返回,表示资源的最后更新时间;
    If-Modified-Since:通过比较两次的时间来判断资源在请求期间是否有修改,如果没有修改,则命中协商缓存,浏览器从缓存中读取资源,如果没有命中,资源有修改过,则返回新的Last-Modified时间和服务器资源。

    ETag,If-None-Match

    某些情况下仅判断最后修改日期来验证资源是否改动是不够的的:

    1. 存在周期性重写某些资源,但资源实际包含的内容并无变化;
    2. 被修改的信息并不重要,如注释等;
    3. Last-Modified 无法精确到毫秒,但有些资源更新频率有时会小于一秒。

    ETag:为响应头部字段,表示资源内容的唯一标识,随服务器response返回;
    If-None-Match:服务器比较请求头中的 If-None-Match 和当前资源中的 etag 是否一致,来判断资源是否修改过,如果没有修改,则命中缓存,浏览器从缓存中读取资源,如果修改过,服务器会返回新的etag,并返回资源。

    浏览器第一次请求时:

    在这里插入图片描述

    浏览器在后续进行请求时:

    在这里插入图片描述

    强缓存和协商缓存的区别

    缓存类型获取资源形式状态码发送请求到服务器
    强缓存从缓存取200(from cache)否,直接从缓存获取
    协商缓存从缓存取304(Not Modified)是,通过服务器来告知缓存是否可用
  • 相关阅读:
    存储卡格式化后数据如何恢复呢?
    SpringCloud-Rest微服务工程的构建
    C++ 数字图像处理之FAST 角点检测
    SpringBoot SpringBoot 原理篇 1 自动配置 1.1 bean 的加载方式【一】
    阿里云国际站:应用实时监控服务
    剑指Offer--LeetCode刷题篇_day02
    Docker安装GitLab及使用图文教程
    使用javacv对摄像头视频转码并实现播放
    mysql数据库基础管理--数据库权限表
    信息学奥赛一本通:1162:字符串逆序
  • 原文地址:https://blog.csdn.net/weixin_45832482/article/details/125464978