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


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

    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)是,通过服务器来告知缓存是否可用
  • 相关阅读:
    【保姆级】lookup-method标签实践与分析
    股票 SQL
    【设计模式】建造者模式
    【ESP32】22.智能家居-DHT11温湿度采集(WiFi)
    Java中的自动装箱和拆箱
    基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表
    PCIe系列专题之二:2.7 Flow Control的实现过程
    C++学校图书馆管理系统
    框架安全&CVE复现&Django&Flask&Node.JS&JQuery
    QT DAY7
  • 原文地址:https://blog.csdn.net/weixin_45832482/article/details/125464978