• 浏览器缓存机制(HTTP缓存机制)


    其机制是根据HTTP报文的缓存标识进行的。

    过程:浏览器发起HTTP请求 服务器响应该请求。那么浏览器第一次向服务器发起该请求后拿到请求结果,会根据响应报文中HTTP头的缓存标识,决定是否缓存结果,则将请求结果和缓存标识存入浏览器缓存中

    缓存过程分为两个部分,分别是强制缓存和协商缓存。

    一、强制缓存:

    控制强制缓存的字段分别有

    Expires 表示未来资源会过期的时间。当发起请求的时间超过了 expires 设定的时间,会发送请求到服务器重新获取资源。Http 1.0版本

    Cache-Control: 取值有五种,如下: http 1.1 版本

    • private:客户端可以缓存
    • public:客户端和代理服务器均可缓存;
    • max-age=xxx:缓存的资源将在 xxx 秒后过期;
    • no-cache:需要使用协商缓存来验证是否过期;
    • no-store:不可缓存

    注:Cache-Control优先级比Expires高。

    请求对应的Size值则代表该缓存存放的位置,分别为

    from memory cache(代表使用内存中的缓存,一般指js、图片等。特点:快速读取和时效性,进程关闭,内存清空,)

    from disk cache(代表使用的是硬盘中的缓存,一般Css)

    浏览器读取缓存的顺序为 内存-> 硬盘 即memory –> disk

    二、协商缓存:

    控制协商缓存的字段分别有Etag/If-None-Match 和Last-Modified/ If-Modified-Since 

    1 http 1.1 版本中,在第一次请求时,服务器通过 Etag 来设置响应头缓存标识,并将资源和 Etag 一并返回给浏览器,浏览器缓存到本地

    在第二次请求时,浏览器会将 Etag 信息放到 If-None-Match 请求头去访问服务器,服务器收到请求后,会将服务器中的文件标识与浏览器发来的标识进行对比,

    1. 不相同,服务器返回更新资源和新Etag.   b.相同,服务器返回 304 ,浏览器读取缓存。

    2http 1.0版本中,第一次请求服务器通过 Last-Modified 来设置响应头的缓存标识,并且把资源最后修改的时间作为值填入,然后将资源返回给浏览器。

    在第二次请求时,浏览器会首先带上 If-Modified-Since 请求头去访问服务器,服务器会将 If-Modified-Since 中携带的时间与资源修改的时间匹配

    1. 时间不一致,服务器返回新资源,且将Last-Modified值更新作为响应头返回给浏览器。
    2. 时间一致,表示资源没有更新,服务器返回304状态码,浏览器读取缓存资源。

    注:弊端,就是当服务器中的资源增加了一个字符,后来又把这个字符删掉,本身资源文件并没有发生变化,但修改时间发生了变化。当下次请求过来时,服务器也会把这个本来没有变化的资源重新返回给浏览器。

    总结

    强制缓存优先于协商缓存进行,若强制缓存(ExpiresCache-Control)生效则直接使用缓存,若不生效则进行协商缓存(Last-Modified / If-Modified-SinceEtag / If-None-Match),协商缓存由服务器决定是否使用缓存,若协商缓存失效,那么代表该请求的缓存失效,重新获取请求结果,再存入浏览器缓存中;生效则返回304,继续使用缓存

  • 相关阅读:
    sizeof in C
    Get WIFI SSID and BSSID
    Swift和C混合Socket编程实现简单的ping命令&主机发现
    The different of bit Compiler
    Get all Ethernet information in Swift
    Get Local IP Address in Swift
    编译Unity3D Mono 加密DLL 填坑记
    spring-quartz 项目启动后执行一次job 之后按照规定时间执行job
    通过反射获取SSM的controller层的注解以及注解中的value值
    网页中高亮选中的关键字
  • 原文地址:https://www.cnblogs.com/renzm0318/p/11073881.html
Copyright © 2020-2023  润新知