深入之浏览器缓存

浏览器的缓存

强缓存

经过一次请求后,将文件放在内存或磁盘中,下次不需要发送请求,直接从本地拿

  • 缓存到内存

    当进程(浏览器页面)结束后,内存中缓存会被释放掉

  • 缓存到磁盘

    会一直存在

    Pragma和Expires和Cache-Control

    • Expires Http1.0

      过期时间,对比浏览器时间,没有过期则使用缓存数据

      缺点:由于系统时间可以修改,不准确

    • Cache-Control Http 1.1 通用的消息头字段,响应头和请求头都可以带上

      no-cache 不缓存 响应头设置代表跳过强缓存,请求头中设置代表跳过缓存策略

      no-store 不缓存响应数据 代表禁用一切缓存

      max-age 失效时间,以秒为单位 max-age = 0 代表跳过强缓存

      public 缓存可以共享

      private 个人的,缓存不可以共享

协商缓存 (对比缓存)

发送请求,服务器先检查头部是否有缓存标识,有则命中协商缓存,返回304

  • If-Modified-Since / Last-Modified

    响应头返回Last-Modified,

    请求头带上 if-Modified-sSnce : 值是响应头的Last-Modified

  • If-None-Matched / Etag

    Etag 服务器资源唯一的标志 http1.1

    响应头返回Etag,

    请求头带上 If-None-Matched : 值是响应头的Etag

    有了Last-Modified为什么还要Etag?

    • Etag精准度到秒,如果短时间内频繁改动资源,操作会失效

    • 有的文件会定时生成,内容一样,但是Last-Modified不一样

浏览器的刷新

  • 正常的链接进入

    先匹配强缓存,再匹配协商缓存

  • 页面刷新或拿地址重新打开页面

    跳过强缓存,发请求,匹配协商缓存

  • 强制刷新

    跳过缓存策略

  • 勾选disable cache

    请求头中设置 cache-control: no-cache 跳过缓存策略

你可能感兴趣的:(深入之浏览器缓存)