浏览器缓存介绍

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_15253407/article/details/83023242
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>浏览器的缓存</title>
</head>
<body>
<script>

    //// 浏览器的缓存

    // 1. 如何加快页面打开的速度(思路可以将第一次的一些请求复制一份存储于浏览器)
        /// 缓存方式两种 1.HTML Meta 标签控制  2. 就是 http的请求头来控制
            /// <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> ///  所有的缓存代理服务器均不支持,所以并未被广泛使用。
            /// http头部控制
    /**
     *  1.浏览器每次向服务器发起http来获取结果(包含 HTTP 头信息各种字段)后,在响应的报文中HTTP 头的缓存标识字段,来决定是否将请求结果存入浏览器缓存中。
     *
     *  2.浏览器每次在向服务器发送http请求的时,都会查看浏览器缓存中是否存在响应的请求结果,然后根据缓存的标识字段来,区分是读取缓存还是重新向服务器发送请求。
     *
     *  3.对于第一次访问一个站点,浏览器不会存在在其请求资源相应的副本,这时浏览器便会直接向服务器发出 HTTP 请求来获得相应的请求结果,并根据缓存标识字段,来决定是否将请求结果作为副本存入浏览器缓存中。
     *
     *  4.http保持已缓存数据与服务器数据之间的数据一致性称之为,文档过期和服务器再验证,从浏览器的的缓存来看可以分类为强制缓存和协商缓存。
     *      文档过期
     *          当浏览器发起http请求时候,会根据浏览器缓存中的缓存标识字段来验证文档(资源副本)是否过期
     *              上面的缓存标识字段是 Expires 和 Cache-Control。
     *                  Expires 服务器在响应请求的时,用来规定资源的失效时间 (http 1.0的标识字段)
     *                  Cache-Control 规定服务器在响应请求的时候,是否被缓存,和缓存失效的事件(http 2.0的标识字段)
     *                      public: 所有的内容都会被缓存(客户端,代理服务器)
     *                      private:仅客户端可以被缓存(客户端可以,代理服务器不可以被缓存)
     *                      no-cache: 是指资源禁止被缓存
     *                      no-store:所有内容都不会被缓存或 Internet 临时文件中
     *                      max-age=xxx:缓存的内容将在 xxx 秒后失效
     *
     *                  tips: 如果Expires和 Cache-Control同时存在 Cache-Control权重高于Expries
     *
     *                  在浏览器中根据 Expires和Cache-Control来判定浏览器缓存的副本资源是否过期,称之为HTTP 的文档过期验证机制,若是文档没有过期,则浏览器会直接使用缓存中的文档作为返回结果,若是文档已经过期了,则需要进行服务器再验证。
     *       服务器再验证
     *          在浏览器缓存中,还保存了关于资源副本的描述字段,这些字段都是服务器返回信息头带过来的,如 Last-Modified 和 Etag。
     *              Last-Modified 是服务器在响应的时候用来说明资源最后修改的时间,与之对应的是 If-Modified-Since 字段
     *              if-Modified-Since 浏览器发送http请求的时候会带上他的是就是 Last-Modified 的值
     *
     *              tips: 两者的工作流程 当服务器接收到 if-Modified-Since 则会将 If-Modified-Since 属性的值与Last-Modified(被请求资源的最后修改时间)做对比,
     *              如果相同,说明资源没有新的修改,则响应 HTTP 304,浏览器会继续使用原先保存的该资源的副本;如果最后修改时间比较新,则说明资源被修改过,则响应 HTTP 200,并且返回最新的资源。
     *
     *
     *              Etag 是服务器端在响应请求时用来说明资源在服务器端的唯一标识
     *              If-None-Match 浏览器发送的 HTTP 请求的请求头中会带上 If-Modified-Since 字段,值为该资源 Etag 属性的值。
     *
     *              tips: 当服务器端接收到带有 If-None-Match 属性的请求时,则会将 If-None-Match 属性的值与被请求资源的唯一标识做对比。如果相同,说明资源没有新的修改,则响应 HTTP 304,浏览器会继续使用原先保存的该资源的副本;如果不同,则说明资源被修改过,则响应 HTTP 200,并且返回最新的资源。
     *
     *              2. 当两者同时存在时,Etag / If-None-Match 的优先级要高于 Last-Modified / If-Modified-Since,
     *                  原因:  Last-Modified / If-Modified-Since, 在计算文件最后修改的时间时候会产生问题
     *                      1. Last-Modified 他的修改时间只可以精确到秒,这些文件如果在一秒被修改则不能检测
     *                      2. 如果某些文件会被定期生成,但有时内容并没有任何变化,但 Last-Modified 却改变了,导致文件没法使用缓存;
     *                      3. 有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形;
     *
     *
     */
</script>
</body>
</html>

图解介绍 来自:https://juejin.im/post/59c602276fb9a00a3d135f2e

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_15253407/article/details/83023242
今日推荐