• 浏览器缓存机制


    参考学习:https://www.cnblogs.com/shixiaomiao1122/p/7591556.html
    1.浏览器HTTP请求流程:
     第一次请求:
     在这里插入图片描述
    再次请求:
    在这里插入图片描述

    1.1 强缓存
    用户发送的请求,直接从客户端缓存中获取,不发送请求到服务器,不与服务器发生交互行为。
    强缓存可以通过设置两种 HTTP Header 实现:Expires 和 Cache-Control 。强缓存表示在缓存期间不需要请求,state code为 200
    Expires
    Expires: Wed, 22 Oct 2018 08:41:00 GMT

    Expires 是 HTTP/1 的产物,表示资源会在 Wed, 22 Oct 2018 08:41:00 GMT 后过期,需要再次请求。并且 Expires 受限于本地时间,如果修改了本地时间,可能会造成缓存失效。
    Cache-control

    Cache-control: max-age=30
    

    Cache-Control 出现于 HTTP/1.1,优先级高于 Expires 。该属性值表示资源会在 30 秒后过期,需要再次请求。
    Cache-Control 可以在请求头或者响应头中设置,并且可以组合使用多种指令、
    在这里插入图片描述一些常见指令的作用
    在这里插入图片描述

    1.2 协商缓存
    用户发送的请求,发送到服务器后,由服务器判定是否从缓存中获取资源。
    两者共同点:客户端获得的数据最后都是从客户端缓存中获得。
    两者的区别:从名字就可以看出,强缓存不与服务器交互,而协商缓存则需要与服务器交互。
    如果缓存过期了,就需要发起请求验证资源是否有更新。协商缓存可以通过设置两种 HTTP Header 实现:Last-Modified 和 ETag
    当浏览器发起请求验证资源时,如果资源没有做改变,那么服务端就会返回 304 状态码,并且更新浏览器缓存有效期。

    1.3 Last-Modified 和 If-Modified-Since

    Last-Modified 表示本地文件最后修改日期,If-Modified-Since 会将 Last-Modified 的值发送给服务器,询问服务器在该日期后资源是否有更新,有更新的话就会将新的资源发送回来,否则返回 304 状态码。

    但是 Last-Modified存在一些弊端:

    1.Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的新鲜度
    2.如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存
    3. 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形

    1.4 ETag 和 If-None-Match

    ETag 类似于文件指纹,If-None-Match 会将当前 ETag 发送给服务器,询问该资源 ETag 是否变动,有变动的话就将新的资源发送回来。并且 ETag优先级比 Last-Modified 高。

    1.5 缓存位置

    从缓存位置上来说分为四种,并且各自有优先级,当依次查找缓存且都没有命中的时候,才会去请求网络
    
    Service Worker
    Memory Cache
    Disk Cache
    Push Cache
    网络请求
    
  • 相关阅读:
    python学习之【第十一篇】:Python中的文件操作
    vue2-preview引用时报错解决办法
    原生JS封装_new函数,实现new关键字的功能
    vue+element UI + axios封装文件上传及进度条组件
    Python面试题汇总
    在vue中如何使用axios
    tp5 修改默认的分页url
    jq判断是PC还是手机端的方法
    php 通过curl header传值
    windows 安装memchched和memcache教程
  • 原文地址:https://www.cnblogs.com/princeness/p/11664934.html
Copyright © 2020-2023  润新知